0%

python400集1

python基础入门

python入门

1.注释

  1. (1) 行注释

    每行注释前加#号。当解释器看到#,则忽略这一行#后面的内容

  2. (2) 段注释

    使用三个连续单引号(‘’’)。当解释看到’’’,则会扫描到下一个’’’,然后忽略他们

之间的内容。

2.行连接符

使用\行连接符

一行程序长度是没有限制的,但是为了可读性更强,通常将一行比较长的程序分为多行。这 是,我们可以使用\行连接符,把它放在行结束的地方。Python 解释器仍然将它们解释为同 一行。

>>> a = [10,20,30,40,\ 50,60,70,\

​ 80,90,100]

3.对象

Python 中,一切皆对象。每个对象由:标识(identity)、类型(type)、value(值)

组成。

  1. 标识用于唯一标识对象,通常对应于对象在计算机内存中的地址。使用内置函数 id(obj) 可返回对象 obj 的标识。

  2. 类型用于表示对象存储的“数据”的类型。类型可以限制对象的取值范围以及可执行的 操作。可以使用 type(obj)获得对象的所属类型。

  3. 值表示对象所存储的数据的信息。使用 print(obj)可以直接打印出值。

对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作。

源码:

>>> a = 3
>>> a
3
>>> id(3) 1531372336
>>> type(3) <class ‘int’>
>>> b = “我爱你” >>> id(a) 1531372336

>>> type(a) <class ‘int’> >>> print(a) 3

>>> id(b) 46806816 >>> type(b) <class ‘str’>

引用

在 Python 中,变量也称为:对象的引用。因为,变量存储的就是对象的地址。 变量通过地址引用了“对象”。

变量位于:栈内存(压栈出栈等细节,后续再介绍)。 对象位于:堆内存。

·Python 是动态类型语言

变量不需要显式声明类型。根据变量引用的对象,Python 解释器自动确定数据类型。

·Python 是强类型语言

每个对象都有数据类型,只支持该类型支持的操作。

4.python标识符规则

类型 规则 例子
模块和包名 全小写字母,尽量简单。若多个单词之间用 下划线 math, os, sys
函数名 全小写字母,多个单词之间用下划线隔开 phone, my_name
类名 首字母大写,采用驼峰原则。多个单词时, 每个单词第一个字母大写,其余部分小写 MyPhone 、 MyClass 、 Phone
常量名 全大写字母,多个单词使用下划线隔开 SPEED、MAX_SPEED

5.变量声明赋值

变量的声明和赋值用于将一个变量绑定到一个对象上,格式如下: 变量名 = 表达式

最简单的表达式就是字面量。比如:a = 123 。 运行过程中,解释器先运行右边的表达式, 生成一个代表表达式运算结果的对象;然后,将这个对象地址赋值给左边的变量。

变量在使用前必须先被初始化(先被赋值),否则出现NameError

可以通过 del 语句删除不在使用的变量。

如果对象没有变量引用,就会被垃圾回收器回收,清空内存空间。

1
2
3
4
5
6
>>> a=123
>>> del a
>>> x
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module> x
NameError: name 'x' is not defined

链式赋值

链式赋值用于同一个对象赋值给多个变量。 x=y=123 相当于:x=123; y=123

系列解包赋值

系列数据赋值给对应相同个数的变量(个数必须保持一致) >>> a,b,c=4,5,6 相当于:a=4;b=5;c=6

使用系列解包赋值实现变量交换

1
2
3
4
>>> a,b=1,2 
>>> a,b=b,a
>>> print(a,b)
21

Python 不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规 则,以及在程序的逻辑上不对常量的值作出修改。(bug,其实可以改,所以说还是java好啊)

6.数据类型

使用 int()实现类型转换::其他类型转int

python有自动转型,小转大,int+float自动转float

最大整数是googol,也就是Google最初的名字,googol = 10**100

类似于 int(),我们也可以使用 float()将其他类型转化成浮点数。

round(value)可以返回四舍五入的值 注:但不会改变原有值,而是产生新的值

运算符+、-、,/、//、*和%和赋值符=结合可以构成“增强型赋值运算符”。

注意:“+=”中间不能加空格!

python 中可以通过 time.time() 获得当前时刻,返回的值是以秒为单位,带微秒 (1/1000 毫秒)精度的浮点值。

1
2
3
4
5
6
7
>>> import time
>>> b = int(time.time())
>>> totalMinutes = b/60
>>> totalMinutes = b//60
>>> totalHours = totalMinutes//60
>>> totalDays = totalHours//24
>>> totalYears = totalDays//365

Python2 中没有布尔值,直接用数字 0 表示 False,用数字 1 表示 True。(类似c)
Python3 中,把 True 和 False 定义成了关键字,但他们的本质还是 1 和 0,甚至可以和数 字相加。

同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。

is;is 是判断两个标识符是不是引用同一个对象

is not:is not 是判断两个标识符是不是引用不同对象

is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。

== 用于判断引用变量引用对象的值是否相等,默认调用对象的 eq()方法。

Python 仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对 象。需要注意的是,这仅仅是在命令行中执行,而在 Pycharm 或者保存为文件执行,结果是不一样 的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])。

·总结
1、is 比较两个对象的 id 值是否相等,是否指向同一个内存地址;
2、== 比较的是两个对象的内容是否相等,值是否相等;
3、小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用;
4、is 运算符比 == 效率高,在变量和 None 进行比较时,应该使用 is。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False
>>> id(a) 46764560
>>> id(b) 46765216
>>> c = 10
>>> d = 10
>>> c is d
True#和整数缓存有关,类似java
>>> id(c) 1388831648
>>> id(d) 1388831648

与 C 和 JAVA 不一样,Python 不支持自增(++)和自减(–)

7。字符串

字符串的本质是:字符序列。Python 的字符串是不可变的,我们无法对原字符串做任 何修改。但,可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。

Python 不支持单字符类型,单字符也是作为一个字符串使用的。

Python3 直接支持 Unicode,可以表示世界上任何书面语言的字符。Python3 的字符 默认就是 16 位 Unicode 编码,ASCII 码是 Unicode 编码的子集。

使用内置函数 ord()可以把字符转换成对应的 Unicode 码; 使用内置函数 chr()可以把十进制数字转换成对应的字符。

连续三个单引号或三个双引号,可以帮助我们创建多行字符串。例如:

resume = ‘’’ name=”gaoqi”
company=”sxt” age=18
lover=”Tom”‘’’

>>> print(resume)

name=”gaoqi”

company=”sxt” age=18 lover=”Tom”

转义字符: 我们可以使用“\+特殊字符”,实现某些难以用字符表示的效果

我们前面调用 print 时,会自动打印一个换行符。有时,我们不想换行,不想自动添加换行 符。我们可以自己通过参数 end = “任意字符串”。实现末尾添加任何内容

1
2
3
4
5
print("sxt",end=' ') 
print("sxt",end='##')
print("sxt")
运行结果:
sxt sxt##sxt

我们可以使用 input()从控制台读取键盘输入的内容。

当我们调用 print()函数时,解释器自动调用了 str()将非字符串的对象转成了字符串。

字符串的本质就是字符序列,我们可以通过在字符串后面添加[],在[]里面指定偏移量, 可以提取该位置的单个字符。

正向搜索:
最左侧第一个字符,偏移量是 0,第二个偏移量是 1,以此类推。直到 len(str)-1

为止。 反向搜索:

最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str) 为止。

字符串不可改变。但是,我们确实有时候需要替换某些字符。这时,只能通过创建新的字符 串来实现。

使用replace

1
2
a="alfjoashoa"
a=a.replace("a","替换字")

切片 slice 操作可以让我们快速的提取子字符串。标准格式为: [起始偏移量 start:终止偏移量 end:步长 step]

典型操作(三个量为正数的情况)如下:

操作和说明 示例 结果
[:] 提取整个字符串 “abcdef”[:] “abcdef”
[start:]从 start 索引开始到结尾 “abcdef”[2:] “cdef”
[:end]从头开始知道 end-1 “abcdef”[:2] “ab”
[start:end]从 start 到 end-1 “abcdef”[2:4] “cd”
[start​:end:step]从 start 提取到 end-1,步长是 step “abcdef”[1:5:2] “bd”
1
其他操作(三个量为负数)的情况:
示例 说明 结果
“abcdefghijklmnopqrstuv wxyz”[-3:] 倒数三个 “xyz”
“abcdefghijklmnopqrstuv wxyz”[-8:-3] 倒数第八个到倒数第 三个(包头不包尾) ‘stuvw’
“abcdefghijklmnopqrstuv wxyz”[::-1] 步长为负,从右到左 反向提取 ‘zyxwvutsrqpon mlkjihgfedcba’

split()分割和 join()合并

split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔 符,则默认使用空白字符(换行符/空格/制表符)。示例代码如下:

1
2
3
4
5
>>> a = "to be or not to be" 
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']

join()的作用和 split()作用刚好相反,用于将一系列子字符串连接起来。示例代码如下:

1
2
3
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'

拼接字符串要点:

使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐 使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝, 仅新建一次对象。

字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> a = "abd_33"
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True

字符串比较和同一性

我们可以直接使用==,!=对字符串进行比较,是否含有相同的字符。
我们使用 is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是 否和 id(obj2)相等。

字符串常用方法汇总

常用查找方法

1
2
3
4
5
6
7
8
a="akhfahglwaejiorhsdlhgkld"
len(a)#返回长度
a.startswith('a')#以指定字符串开头
a.endswith('d')#以指定字符串结尾
a.find('k')#第一次出现指定字符串的位置
a.rfind('d')#最后一次出现指定字符串的位置
a.count('ad')#指定字符串出现几次
a.isalnum()#所有字符全是字母数字

去除首尾信息

我们可以通过 strip()去除字符串首尾指定信息。通过 lstrip()去除字符串左边指定信息, rstrip()去除字符串右边指定信息。

1
2
3
4
5
6
7
8
>>> "*s*x*t*".strip("*") 
's*x*t'
>>> "*s*x*t*".lstrip("*")
's*x*t*'
>>> "*s*x*t*".rstrip("*")
'*s*x*t'
>>> " sxt ".strip()
'sxt'

大小写转换

a.capitalize() 产生新的字符串,首字母 大写
a.title() 产生新的字符串,每个单 词都首字母大写
a.upper() 产生新的字符串,所有字 符全转成大写
a.lower() 产生新的字符串,所有字 符全转成小写
a.swapcase() 产生新的,所有字母大小 写转换

格式排版

center()、ljust()、rjust()这三个函数用于对字符串实现排版。示例如下: >>> a=”SXT”
>>> a.center(10,”*”)
SXT*

>>> a.center(10)
‘ SXT ‘
>>> a.ljust(10,”*”) ‘SXT***

其他方法

\1. isalnum() 是否为字母或数字
\2. isalpha() 检测字符串是否只由字母组成(含汉字)。 3. isdigit() 检测字符串是否只由数字组成。
\4. isspace() 检测是否为空白符
\5. isupper() 是否为大写字母
\6. islower() 是否为小写字母

字符串的格式化

format()基本用法

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的 功能。
基本语法是通过 {} 和 : 来代替以前的 % 。

format 函数可以接受不限个参数,位置可以不按顺序。

1
2
3
4
5
6
7
8
9
10
11
>>> a = "名字是:{0},年龄是:{1}" 
>>> a.format("高淇",18)
'名字是:高淇,年龄是:18'
>>> a.format("高希希",6)
'名字是:高希希,年龄是:6'
>>> b = "名字是:{0},年龄是{1}。{0}是个好小伙"
>>> b.format("高淇",18)
'名字是:高淇,年龄是 18。高淇是个好小伙'
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是 19'#我们可以通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化,非常方便。

填充与对齐

填充常跟对齐一起使用 ^、<、>分别是居中、左对齐、右对齐,后面带宽度

:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

1
2
>>> "{:*>8}".format("245")
'*****245'

浮点数通过 f,整数通过 d 进行需要的格式化。案例如下:

1
2
3
4
>>> a = "我是{0},我的存款有{1:.2f}"

>>> a.format("高淇",3888.234342)
'我是高淇,我的存款有 3888.23'
数字 格式 输出 描述
3.1415926 {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2f} 3.14 带符号保留小数点后两位
2.71828 {:.0f} 3 不带小数
5 {:0>2d} 05 数字补零 (填充左边, 宽度为 2)
5 {:x<4d} 5xxx 数字补 x (填充右边, 宽度为 4)
10 {:x<4d} 10xx 数字补 x (填充右边, 宽度为 4)
1000000 {:,} 1,000,000 以逗号分隔的数字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00E+09 指数记法
13 {:10d} 13 右对齐 (默认, 宽度为 10)
13 {:<10d} 13 左对齐 (宽度为 10)
13 {:^10d} 13 中间对齐 (宽度为 10)

可变字符串

在 Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,智 能创建新的字符串对象。但是,经常我们确实需要原地修改字符串,可以使用 io.StringIO 对象或 array 模块。

1
2
3
4
5
6
7
8
9
10
11
12
>>> import io
>>> s = "hello, sxt"
>>> sio = io.StringIO(s)
>>> sio
<_io.StringIO object at 0x02F462B0> >>> sio.getvalue()
'hello, sxt'
>>> sio.seek(7)
7
>>> sio.write("g")
1
>>> sio.getvalue()
'hello, gxt'