记录摘自《Python核心编程(第二版)》
个人站点:https://www.devtester.cn/
本章是一些基本介绍,概念为主,建议在对python编程有一个基本实践之后,再阅读
1. python语句和语法
1.1#
注释符
python只支持行注释, 虽然三引号’''或"“”,但三引号的本质是字符串,而不是注释
1.2 \
换行继续符,通常使用于不得不换行的地方
不加换行符,会报错
加了换行符,不再报错(部分IDE会在代码格式化或语句内换行时自动添加)
1.3 :
复合语句如if, while def和class需要末尾使用 : 进行分割
1.4 缩进
缩进用来区分代码组,建议使用四个空格,需要注意制表符的空格数量,避免因不同编辑器制表符空格数不同而产生错误
1.5 ;
同一行写多个语句要用 ; 隔开,但是不建议使用,会降低可读性
1.6 模块
每一个python脚本文件都可以被当做一个模块,其命名需要符合变量命名规范,可通过import语句被其他文件导入
2. 变量赋值
2.1 赋值操作符 =
使用=号进行赋值,如
aInt = 1
需要注意的是python中,对象是通过引用传递的,在赋值时,不管该对象是新创建还是已经存在的,都是将该对象的引用赋值给变量,而不是将值赋值给变量。
2.2 增量赋值
x += 1 即 x = x + 1
数学运算符以及位运算符等等都可以,如下所示:
+= | -= | *= |
---|---|---|
/= | %= | **= |
<<= | >>= | &= |
^= | |= |
不支持x++这种写法,不支持++x自增
a = 1
b = ++a
# 其+号所代表的是正号,而不是加运算,该语句结束后,a与b的值都是1
# 同理 d = --c, -是负号而不是减运算
这与C,JAVA等语言是不同的
2.3 多重赋值
x = y = z = 1
创建一个值为1的整型对象,该对象的同一个引用被赋值给x, y和z
2.4 多元赋值
将多个变量同时赋值的操作
x, y, z = 1, 2, 'string'
3. 标识符
标识符是计算机语言中允许作为名字的集合
3.1 合法标识符
- 第一字母必须是字母或下划线
- 剩余字符可以是字母,数字或下划线
- 大小写敏感
3.2 关键字
关键字是保留字,不能用于其他用途,否则会引起语法错误
keywordks模块包含了一个关键字列表与一个iskeyword()函数,可以用来查询与判断标识符是否合法
import keyword
if __name__ == '__main__':
print(len(keyword.kwlist))
print(keyword.kwlist) # 见下表
print(keyword.iskeyword('not')) #输出True
False | None | True | and | as |
---|---|---|---|---|
assert | async | await | break | class |
continue | def | del | elif | else |
except | finally | for | from | global |
if | import | in | is | lambda |
nolocal | not | or | pass | raise |
return | try | while | with | yield |
3.3 内建built-in
它是__builtins__模块的成员,可以由解释器设置或使用,能在任何一级代码中使用,应将它们视作系统保留字,不做他用,以免产生混淆
3.4 专用下划线标识符
用下划线作为变量前缀和后缀指定特殊变量,如无特殊需求,不建议用下划线作为变量名的开始
4. 内存管理
本节包括的变量与内容的细节:
- 变量无须事先声明
- 变量无须指定类型
- 程序员不用关心内存管理
- 变量名会被回收
- del语句能够直接释放资源
4.1 变量定义
python中无需显示声明变量,变量在第一次被赋值时自动声明,与大多数语言一样,变量只有被创建和赋值后才能被使用
4.2 动态类型
在python中,对象的类型和内存占用都是运行时确定的。尽管代码被编译成字节码。python仍然是一种解释性语言
4.3 内存分配
python解释器承担内存管理得到任务
4.4 引用计数
python使用引用计数追踪内存中的对象。一个内部跟踪变量,称为一个引用计数器,每个对象各有几个引用,简称引用计数。当某个对象的引用计数变为0时,它被垃圾回收
4.4.1 增加引用计数
当对象被创建并(将其引用)赋值给变量时,该对象的引用计数就被设置为1。
如下情况,对象引用计数增加:
- 对象被创建
x = 3.14
- 或另外的别名被创建
y = x
- 或被作为参数传递给函数(新的本地引用)
foobar(x)
- 或成为容器对象的一个元素
my_list = [123,x,y]
4.4.2 减少引用计数
当对象的引用被销毁时,引用计数会减小。
如下条件:
- 一个本地引用离开了其作范围
- 对象别名被显示销毁
del x
- 对象的别名被赋值给其他对象
x = 1
x = 123 # 1的引用计数-1
- 对象被从一个窗口对象中移除
my_list.remove(x)
- 窗口对象本身被销毁
del my_list
4.5 垃圾收集
不再使用的内存会被一种称为垃圾收集的机制释放。解释器跟踪对象的引用计数,垃圾收集器负责释放内存,他是一块独立的代码,用来寻找引用计数为0的对象,也负责检查虽然引用计数大于0但也应该被销毁的对象
python的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器