3.1 语句和语法
- 注释:
- (#)之后的注释一行
- 三引号可以注释多行–文档说明
- 反斜线(\)表示接上一行,用于分行编辑同一语句
- 闭合操作符(各种括号,三引号)可以多行书写
- 推荐使用闭合操作符代替反斜线
- 分号(;)同一行书写多个,不推荐
- 冒号(:)将代码块(一个子句)的头和体(即代码组)分开
- 缩进区分不同的代码组
- 不同python文件标记为不同的模块
3.2 类型
(待定,python中皆对象)
Python中的数据类型很多,而且也允许我们自定义新的数据类型,以下为几种基本数据类型。
- 整型:
- Python中可以处理任意大小的整数(Python2.x中有int和long两种类型的整数,但这种区分对Python来说意义不大,因此在Python 3.x中整数只有 int 这一种了)
- 支持二进制(如0b100,换算成十进制是4)、八进制(如0o100,换算成十进制是64)、十进制(100)和十六进制(0x100,换算成十进制是256)的表示法。
- 浮点型:
- 浮点数也就是小数float,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如123.456)之外还支持科学计数法(如1.23456e2)。
- 字符串型
- 字符串是以单/双引号括起来的任意文本,比如’hello’和"hello"
- 字符串还有原始字符串表示法(前缀R或r,表示无需转义等处理)、字节字符串表示法、Unicode字符串表示法(前缀U或u)
- 可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾), 在三引号中可以使用单引号和双引号。
- 字符串内可以使用转义符表达各种符号,当转义符出现在某一行的末尾表示接上下一行。
- 字符串是不可变的。加号(+)用于字符串连接运算,星号(*)则用于字符串重复。
- 布尔型
- 布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来(例如3 < 5会产生布尔值True,而2 == 1会产生布尔值False)。
- 复数型
- 如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j。
3.3 标识符
- 合法的标识符
- 首字符为字母或下划线
- 其余字符是字母‘下划线和数字的组合
- 大小写敏感
- 除了关键字(SyntaxError)和built-in标识符(不推荐)
- 关键字
import keyword
print(keyword.kwlist)
print(keyword.iskeyword('return'))
- built-in标识符
者 built-in 是__builtins__模块的成员,在你的程序开始或在交互
解释器中给出>>>提示之前,由解释器自动导入的。把它们看成适用在任何一级 Python 代码的
全局变量。 - 专用下划线标识符
- 单下划线开始表示不能用’from module import *’ 导入
- 双下划线表示类中的私有变量名
- 前后双下划线表示系统定义名(__main__,__all__)
3.4 基本风格指南
- 适当注释
- 善用文档注释
- PEP8
- 模块结构布局
- 起始行
- 模块文档
- 模块导入
- 变量定义
- 类定义语句
- 函数定义语句
- 主程序
- 测试代码
- 模块中的__main__
- 单元测试
3.5 内存管理
- 变量定义
Python无需此类显式声明变量
- 变量在第一次被赋值时自动声明
- 变量只有被创建和赋值后才能被使用
- 变量名会被“回收”
- 动态类型
- Python对象的类型和内存占用都是运行时确定的。尽管代码被编译成字节码,Python仍然是一种解释型语言。
- 在创建即赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型。
- 内存分配
- Python解释器承担了内存管理的复杂任务
- 程序员不用关心内存管理
- 引用计数
(有没有查看计数的方法?)
- Python内部记录着所有使用中的对象各有多少引用
- 对象被创建时,就创建了一个引用计数,当这个对象不再需要时,也就是说,这个对象的引用计数变为0时,它被垃圾回收。(严格来说这不是100%正确,不过现阶段你可以就这么认为)
- 引用计数的增加
- 对象被创建:x = 3.14
- 别名被创建: y = x
- 被作为参数传递
- 成为容器的一个元素
- 引用计数的减少
- 本地引用离开作用范围-局部函数结束
- 对象的别名被显示销毁
- 对象的别名被赋值到新对象
- 对象被从窗口移除
- 窗口对象本身被销毁
- del 语句能够直接释放资源,删除对象的一个引用
- 垃圾收集
- 不再被使用的内存会被一种称为垃圾收集的机制释放
- 垃圾收集器是一块独立代码,它用来寻找引用计数为 0的对象。它也负责检查那些虽然引用计数大于 0 但也应该被销毁的对象。
- 特定情形会导致循环引用。
- 当一个对象的引用计数变为0,解释器会暂停,释放掉这个对象和仅有这个对象可访问(可到达)的其它对象。作为引用计数的补充,垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。在这种情况下,解释器会暂停下来, 试图清理所有未引用的循环。
3.6 开发工具和相关模块
- Debugger: pdb
调试模块 pdb 允许你设置(条件)断点,代码逐行执行,检查堆栈。它还支持事后调试。
- Logger: logging
logging 模块定义了一些函数和类帮助你的程序实现灵活的日志系统。共有五级日志级别: 紧急, 错误,警告,信息和调试。
- Profilers: profile, hotshot, cProfile
cProfile 模块是 Python2.5 新增的, 它用来替换掉已经有历史的 hotshot 和 profile 模块。被作者确认的它的一个较明显的缺点是它需要花较长时间从日志文件中载入分析结果, 不支持子函数状态细节及某些结果不准。它也是用 C 语言来实现的。