Effective Python - 59 Specific Ways to Write Better Python

原书笔记。

用Pythonic方式来思考

确认自己所用的Python版本

Python 2的功能开发已经冻结,只会进行bug修复、安全增强以及移植等工作。可以使用2to3six等工具从Python 2迁移到Python 3

遵循PEP 8风格指南

Python Enhancement Proposal #8简称PEP 8。主要包括以下一些要点。

  • 空白

    -使用space进行缩进,而非tab,每个语法相关缩进使用4个space

    • 每行字符数不超过79

    • 多行的长表达式,应该在首行以后再加一层缩进

    • 函数间隔两行,类中方法间隔一行

    • 不需要前后置space的情形:下标获取元素、调用函数、关键字赋值等

    • 变量赋值的等号两侧各置一个space

  • 命名

    • 函数变量属性使用小写字母,单词间以_相连

    • 受保护的实例属性_开头,私有的实例属性__开头

    • 异常使用CamelNaming

    • 模块级别的常量用全大写,单词间以_相连

    • 类的实例方法首个参数为self,类方法的首个参数为cls

  • 表达式和语句

    • 否定词内联而非前置

    • 不要用长度对容器做零检查,空值会自动评估为False,非空值为True

    • 不写单行的ifforwhile以及except语句

    • import语句在脚本最前,使用绝对名称引入模块,不可避免的相对引用应写作from . import foo

    • import语句分为三个部分:标准库模块、第三方模块和自用模块,各部分内按模块的字母顺序排列

了解bytes、str与unicode的

Python 2 Python 3
字符串原始8位值 str bytes
Unicode字符 unicode str

在写Python程序时,应该把编码和解码放在最外围,核心部分应该使用Unicode字符类型。

打开文件进行操作时,Python 2的默认编码格式为二进制,而Python 3则默认为UTF-8格式(open函数的encoding参数默认值为'utf-8')。可以在open函数的参数中用'b'制定二进制格式.

用辅助函数来取代复杂的表达式

不要一味追求过于紧凑的写法,会写出非常复杂的表达式。

了解切割序列的办法

在单词切片操作内,不要同时制定start、end和stride

用列表推导来取代map和filter

对于简单情形,list comprehension要比mapfilter更加清晰。

不要使用含有两个以上表达式的列表推断

超过两个表达式的list comprehension较难理解,应避免。

用生成器表达式来改写数据量较大的列表推导

Generator expression是对list comprehension和generator的一种泛化,在运行时,不会把整个输出序列呈现出来,而是会估值为iterator。最简单的generator expression可以用括号中的list comprehension来实现:

a = (x**2 for x in range(10))
print a
>>>  at 0x00000000042D2480>

Generator expression可以互相结合,速度较快。

尽量用enumerate取代range

enumerate可以把各种iterator包装成generator,以便稍后产生输出值。Generator每次产生一对输出值,其中前者为循环下标。

用zip函数同时边里两个迭代器

不要在for和while循环后面写else块

你可能感兴趣的:(Effective Python - 59 Specific Ways to Write Better Python)