Fw: [翻譯] Google 建議的 Python 風格指南 7

作者: sandwichC ( )   2013-05-01 21:47:41
※ [本文轉錄自 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')

Links booklink

Contact Us: admin [ a t ] ucptt.com