寫代碼有很多細節(jié),但是多數(shù)時候我們按照慣例——大多數(shù)優(yōu)秀軟件的寫作風(fēng)格就可以了。
Python是一種風(fēng)格沒有太多流派的語言。
關(guān)于字典的遍歷。我見過好幾種。真實經(jīng)歷中也發(fā)生了一些不愉快的爭執(zhí)。
比如我寫這樣的字典遍歷
for key in d:
....
其實是很普遍的寫法。
曾經(jīng)遇到過一些資深的老人,他們認為“不清晰”,可讀性差,硬杠要改成
for key in d.keys():
...
這種追求所謂可讀性,你又如何反駁,沒有什么理由——但是我們在優(yōu)秀的代碼庫中,確實發(fā)現(xiàn)很多簡潔,一眼看懂的代碼——lambda 表達式,閉包。
while else ; for else 這樣的結(jié)構(gòu)。
還有一些令人頗感疑惑的裝飾器——比如 attr.s()
可讀性到底是什么?沒有太多的標準,但是經(jīng)常會被一些老資歷的的人用在他批評沒見過,或者不喜歡的代碼場景中,讓人感覺有點遺憾……
另外字典的迭代還有直接取key ,value值的
應(yīng)該是這樣
for k, v in d.items():
...
高效簡潔。但是寫成這樣應(yīng)該也可以工作
for k in d:
k, d[k]
效率上,多了一次存取。
還有一些 for k, v in list(d.items()): 屬于有點荒唐了。
我個人絕對傾向用 for k in d: 代替 for k in d.keys().
雖然本質(zhì)區(qū)別不大,但是簡潔優(yōu)雅,符合 python推崇的編碼理念。
如果要說這樣不清晰,那是因為你對 for k in d: 的語義沒有習(xí)慣。
可讀性差,是歧義和不明確帶來的,而不是簡潔帶來的。
一種符號如果能用最少的字符表達確切的含義,為什么不使用它呢?