Python 核心编程[第三章]
0x00语句和语法
Python 语句中的一些规则及特数字符
- (#):表示之后的字符为 Python 注释
- (\n): 换行
- (\):继续上一行
- (;):将两个语句连接在一行中
- (:):将代码的头和体分开
- Python以模块的形式组织
1.继续():
在两种情况下不使用 \ 也可以跨行,使用小括号、中括号、花括号时可以多行书写,使用三引号包括下的字符串也可以跨行书写。
2.一行多语句(; ):
分号允许你将一行书写多条语句,这几个语句之间用分号隔开。
0x01变量赋值
1.赋值操作符
Python 中用(=)进行赋值
- 注意赋值并不是将一个值赋值给另一个,Python 中 对象是通过引用传递的,在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用赋值给变量。Python 的赋值语句没有返回值
y = (x = x + 1) # 这是一个非法表达式
2.增量赋值
+=、-= ······ 等在Python中都被支持,Python 中不支持 ++,–等自增自减运算。
3.多重赋值
x = y = z = 1
4.多元赋值
x,y = 1,2
建议写法加上小括号,增加可读性
(x,y) = (1,2)
x,y = y,x
#交换 x,y 的值
0x02标识符
Python 还有称为“内建”的标识符机和,虽然它们并不是保留字,但是不推荐使用这些名字。
1.合法的 Python 标识符
- 第一个字母必须是字母或(_)下划线
- 其他字母是字母数字或下划线
- 大小写敏感
2.关键字
Keyword 模块中同时包含了一个关键字列表和一个 iskeyword() 函数。
3.Python关键字
and | as | assert | break |
class | continue | def | del |
elif | else | except | exec |
finally | for | from | global |
if | import | in | is |
lambda | not | or | pass |
raise | return | try | |
while | with | yield | None |
4.专用下划线标识符
- _xxx :不用 ‘from module import *’ 导入
- _xxx_:系统定义名字
- _xxx:类中的私有变量名,在模块或类外不可以使用
0x03基本风格指南
- 注释:尽量在合适的地方进行注释
- 文档:可以通过 __doc __ 特别变量动态获得文档字符串。
- 缩进:推荐四个空格
1.模块结构和布局
# 推荐布局
# (1)起始行
# (2)模块文档 module.__doc__ 访问这些内容
# (3)模块导入
# (4)变量定义
# (5)类定义
# (6)函数定义
# (7)主程序
主程序中的代码通常包括变量赋值、类定义和函数定义,很多项目都是一个主程序,由它导入所有需要的模块,绝大部分的模块创建都是为了被别人调用,而不是作为一个独立的运行脚本,只有一个模块,也就是包含主程序的模块会被直接执行,或由用户通过命令执行。主程序代码无论模块是被导入还是被直接执行都会运行。
__ name __系统变量能在运行时检测该模块是被导入还是被直接运行。
- 如果被导入,__name __ 的值为模块名字
- 如果直接被运行,__name __的值为’__main__’
0x04内存管理
1.变量定义
在 Python 中,无需显式变量声明语句,变量在第一次被赋值时自动声明
2.动态类型
Python 中不担没变量实现声明,而且也无需类型声明。Python 中,对象的类型和内存占用都是运行时确定的。
3.引用计数
Python 内部记录着所有使用中的对象各由多少引用,当对象被创建时,就创建了一个引用计数器,当这个对象不再需要时,这个对象的引用技术变为 0 ,他被垃圾回收。
- 增加引用计数器
- 当对象被创建赋值给变量时,该对象的引用计数器被设置为 1 。
- 当同一个对象又被赋值给其它变量时,或作为参数传递给函数、方法或实例时,或被赋值为一个窗口对象(列表)的成员时,该对象的一个新的引用,或称作别名,就被创建。
- 减少引用计数器
- 当对象的引用被销毁时,引用计数器会减小。例:当引用离开其作用范围时,最长出现在函数运行结束时。
- 当变量赋值给另一个对象时,原对象的引用计数器也会减 1 。
- 其他方法包括,del 语句删除一个变量,当一个对对象被移除一个窗口对象时,一个窗口对象被销毁时。
- del 语句
- del 会用命名空间中删除变量
- 会减少引用次数
4.垃圾收集
垃圾收集器负责释放内存,垃圾收集器时一块独立代码,它用来寻找引用计数器为 0 的对象。它负责检查那些虽然引用计数器大于 0 但也应该被销毁的对象。