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

作者: ck574b027 (荒圍!定厝!賊!妹!)   2013-05-10 14:34:54
※ [本文轉錄自 Python 看板 #1HYVFfnn ]
作者: ck574b027 (荒圍!定厝!賊!妹!) 看板: Python
標題: [翻譯] Google 建議的 Python 風格指南 15
時間: Wed May 8 14:42:45 2013
原文網址:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
不建議使用的python語法
呼叫string內建的方法而不是module string的方法。
# 官方文件也是如此推薦的。
words = foo.split(':')
words = string.split(foo, ':')
使用呼叫函數的新語法而不是內建的apply。
# 這已經是版本2.3時代的事了。
fn(*args, **kwargs)
apply(fn, args, kwargs)
'''
*args表示可以傳入不定長度的參數,如
def fn(*args):
print args
fn(1,2,3) # print (1, 2, 3)
a = [1,2,3]
fn(*a) # 輸出同上
**kwargs表示傳入關鍵字參數,是個字典(dictionary),如
def fn(**kwargs):
print kwargs
fn(a=3,b=5) # print {'a': 3, 'b': 5}
'''
當filter和map的參數只是個單行lambda的時候,用list comprehensions取代。
[x[1] for x in my_list if x[2] == 5]
map(lambda x: x[1], filter(lambda x: x[2] == 5, my_list))
map(math.sqrt, data) # Ok. 因為不需要lambda。
用for取代reduce。
(這個沒有範例,大概是reduce很容易改寫。
我的看法是沒有需要平行運算的話就少用reduce。)
釋義:
現在的版本提供大家普遍認為比較好看的語法。
結論:
我們不採用不支援這些特性的老版本,所以沒理由寫老語法。
作者: mikapauli (桜花)   2013-05-08 16:45:00
倒數第二個map其實可以去掉lambda變成map(list.__getitem__,filter(bool,map(list.__mul__,my_list,map((5).__eq__,map(list.__getitem__,my_list,[2] * len(my_list))))),[1] * len(my_list))由於Python沒有合成函數等functional programming常用到的功能,讓filter有點難使用

Links booklink

Contact Us: admin [ a t ] ucptt.com