美文网首页
Effective Python - 59 Specific W

Effective Python - 59 Specific W

作者: enriczhang | 来源:发表于2017-11-01 01:11 被阅读0次

    原书笔记。

    用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
    >>> <generator object <genexpr> at 0x00000000042D2480>
    

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

    尽量用enumerate取代range

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

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

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

    相关文章

      网友评论

          本文标题:Effective Python - 59 Specific W

          本文链接:https://www.haomeiwen.com/subject/zrtwpxtx.html