赋值
python中赋值语句不会有返回值
x = 1
y = (x = x + 1) #非法语句
链式赋值
y = x = x + 1
多元赋值,
x, y, z = 1, 2, 'string' #采用此方式时, 等号两边都是元组
(x, y, z) = (1, 2, 'string') #等同于此句
变量交换应用
x, y = 1, 2
x, y = y, x
专用下划线标示符
python用下划线作为变量缀和后缀指定特殊变量
_xxx 不用’from module import *’导入
xxx 系统定义的名字
__xxx 类中私有的变量名
代码布局
- 起始行 类Unix环境下使用
- 模块文档 可通过module.doc来访问
- 模块导入
- 变量定义
- 类定义语句
- 函数定义语句
- 主程序 无论是被别的模块导入还是作为脚本直接执行, 都会执行这部分代码
name指示模块应如何被加载
如果是被导入, name值为模块名字
如果是被执行, name值为’main’
if __name__ == '__main__'
mian() #判断被导入还是执行来决定是否调用main()
在主程序中书写测试代码
模块理论上永远不会被直接直接执行, 因此在这个模块直接执行时进行系统测试. 利用name将测试代码写入main()中,若该模块被当成脚本运行, 就调用这个函数
引用计数
python中内存由解释器管理, 当一个对象被创建时, 就创建了一个引用计数, 当这个对象引用计数变为0时, 它就被垃圾回收
增加引用计数的情况
- x = 3.14 对象被创建
- y = x 以另外的别名被创建
- foobar(x) 作为参数传递给函数
- myList = [123, x, ‘xyz’] 成为容器的一个对象
引用计数减小的情况
- 本地引用离开了作用范围, 如一个函数结束, 其中局部变量被释放
- del y 被显式的销毁
- x = 123 对象的一个别名被赋值给其它的对象
- myList.remove(x)对象被从一个窗口中移除
- del myList 窗口对象本身被销毁
相关模块和开发工具
- Debugger: pdb 调试模块 pdb 允许你设置(条件)断点,代码逐行执行,检查堆栈。它还支持事后调试
- Logger: logging 定义了一些函数和类帮助你的程序实现灵活的日志系统, 共有五级日志级别: 紧急, 错误, 警告, 信息和调试
- Profilers: profile, hotshot, cProfile 性能测试器