※ [本文转录自 Python 看板 #1HWHpCBd ]
作者: sandwichC (没回应=挂站) 看板: Python
标题: [翻译] Google 建议的 Python 风格指南 7
时间: Wed May 1 21:46:49 2013
[翻译] Google 建议的 Python 风格指南 7
原文网址:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
* list comprehension
在逻辑简单的情况下可以使用 list comprehension
释义:
list comprehension 与 generator expression 可以很简约而有效率的产生 list
及 iterator,而且不需要用到 map(), filter(), lambda 函数。
优点:
List comprehension 比其他产生 list 的技巧要清楚而简约。Generator 的表示
法效率很高,因为他们避免一次产生整个 list。
缺点:
复杂的 list comprehension 或 generator expression 不易读懂。
决策:
在逻辑简单的情况下可以使用它们。每一个组成部份都应在一行内结束,这些组成
部份包括:mapping 叙述、for 子句、filter 叙述。若需要超过一个的 for 子句
或超过一个的 filter 叙述,代表该逻辑已经过于复杂,不应该使用 list
comprehension 或 generator expression,而应该使用循环来完成。
正确的例子 1:
result = []
for x in range(10):
for y in range(5):
if x * y > 10:
result.append((x, y))
错误的例子 1:
result = [(x, y) for x in range(10) for y in range(5) if x * y > 10]
正确的例子 2:
for x in xrange(5):
for y in xrange(5):
if x != y:
for z in xrange(5):
if y != z:
yield (x, y, z)
错误的例子 2:
return ((x, y, z)
for x in xrange(5)
for y in xrange(5)
if x != y
for z in xrange(5)
if y != z)
其他正确的例子:
return ((x, complicated_transform(x))
for x in long_generator_function(parameter)
if x is not None)
squares = [x * x for x in range(10)]
eat(jelly_bean for jelly_bean in jelly_beans
if jelly_bean.color == 'black')