Effective Python - 59 Specific W

2017-11-01  本文已影响0人  enriczhang

原书笔记。

用Pythonic方式来思考

确认自己所用的Python版本

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

遵循PEP 8风格指南

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

了解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块

上一篇下一篇

猜你喜欢

热点阅读