顯示廣告
隱藏 ✕
※ 本文為 nakts0123.bbs. 轉寄自 ptt.cc 更新時間: 2013-05-05 19:14:29
看板 Python
作者 uranusjr (←這人是超級笨蛋)
標題 Re: [翻譯] Google 建議的 Python 風格指南 7
時間 Wed May  1 23:28:23 2013


※ 引述《sandwichC (沒回應=掛站)》之銘言:
ya790206:有人覺得 list comprehension 違反 There should be one-05/01 23:06
ya790206:There should be one-- and preferably only one --obvio
ya790206:--obvious way to do it. 規則嗎? 我覺得現在python 有
ya790206:太多方法可以去作同一件事。

List comprehension 和 for 迴圈其實是不一樣的東西
因為它是產生一個 generator 去跑
真正比較像的是 itertools 裡面的功能

至於它們同時存在有沒有違反前面的原則嘛, 我覺得是還好
itertools 完全有其存在必要, 因為用 for 跑大量物件轉換的速度真的差太多了
為了鑽牛角尖而犧牲這麼明顯的效能實在不合理
而 list comprehension 在輕量應用上的簡潔性又大勝 itertools
為了產生一個可以 iterate 的東西就要寫一個完整的 generator 也太多餘

我個人是認為, 雖然這三個東西的「結果」一樣, 但是達到的「目標」其實不一樣
所以其實不算違反上述規則
況且 PEP8 也說要 know when to be inconsistent
即使它們真的重複, 也擁有非常充分的理由

當然其實 Python 現在真的有些地方違反這條規則
不過其實這些大部份都是歷史共業, 基本上 Python 社群都會特別推薦其中一種
例如 string formation 就會推薦 str.format 而非 % syntax
可以用 urllib2 就不要用 urllib
如果真的想達到整數無條件捨去除法應該用 // 而非 /
它們確實違反了規則, 但那是因為新的比較好
只是為了維持起碼的向後支援, 現在還不能完全把舊的砍掉
這也是為什麼 Py3K 會是現在的樣貌



真要說的話 range 和 xrange 功能也算是重複了
更何況字串可以單引號也可以雙引號這不就重複了嗎XD

--


                                      "問おう、貴方が私のマスターか?"

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
※ 編輯: uranusjr        來自: 114.32.81.146        (05/01 23:36)
darkgerm:推~  3 就是為了擺脫舊包伏才會不相容的1F 05/01 23:49
ck574b027:字串這樣可以放引號不用escape啊2F 05/02 15:07

--
※ 看板: Gabinius 文章推薦值: 0 目前人氣: 0 累積人氣: 50 
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇