第一章:用Pythonic方式来思考
第2条 PEP8
《Python Enhancement Proposal #8》8号Python增强提案。
空白:①4个空格代表tab ②每行<=79字符 ③分行后加4个空格 ④类中方法空1行,方法和类空2行
命名:①函数、变量、属性用小写字母和下划线组成 ②受保护用单下划线,私有用双下划线 ③类与异常用驼峰 ④模块级别常量用全大写 ⑤类中实例方法首个参数是self,表示改对象;类方法的首个参数是cls,表示该类。
表达式和语句:①not不要放在表达式前面 ② 采用if not list 判断列表是否为空③import放开头且使用绝对路劲引用(但可以form . import models)④import顺序按照标准库、第三方模块库、自用模块导入,每部分按字母顺序排列。
第3条:了解bytes、str、unicode区别
isinstance(obj, class)判断class类型是否是obj的(父)类
str.encode(‘utf-8’)转变为bytes类型 bytes.decode(‘utf-8’)转变为str类型
在读写文件中,默认是’utf-8’,如果使用二进制必须加上‘b’
python3 bytes是8位值的序列,str是包含Unicode字符序列。
python2 str是8位值的序列,unicode是包含Unicode字符序列。若str只包含7位ASCII,可以使用相关操作同时使用。
第4条:用辅助函数来取代复杂的表达式
repr(obj),将obj对象转换成字符串类型
or左边表达式为真则用左边的,否则用右边的 a = False or ‘1’ # a=1
if/else表达式 a = x if x>y else y
第5条:了解切割序列的办法
assert 表达式, 当表达式等于False时,抛出AssertionError
start或end索引越界也不会出问题
第6条:在单次切片操作内,不要同时指定start、end和stride
同时指定start、end和stride会导致代码难以阅读,stride尽量使用正值。
可考虑使用itertools模块中的islice。(第46条:使用内置算法与数据结构:)
第9条:用生成器表达式来改写数据量较大的列表推导
it = (x for x in range(20000))
next(it)
两个生成器可以串起来用,产生连锁反应。
第13条:合理利用try/except/else/finally
else后面的代码是在try顺利完成后才运行。
except用法
exce