[英]Zen of Python 'Explicit is better than implicit'
我不確定這是一個自以為是的問題,還是我誤解了“隱式”和“顯式”在 Python 上下文中的真正含義。
a = []
# my understanding is that this is implicit
if not a:
print("list is empty")
# my understanding is that this is explicit
if len(a) == 0:
print("list is empty")
我正在嘗試遵循 Python 規則的禪宗,但我很想知道這是否適用於這種情況,還是我想多了? 感謝我能得到的任何指導。
這兩個語句具有非常不同的語義。 請記住,Python 是動態類型的。
對於a = []
, not a
和len(a) == 0
是等價的。 一個有效的替代方法可能是檢查not len(a)
。 在某些情況下,您甚至可能希望通過執行a == []
來檢查空性和列表性。
但是a
可以是任何東西。 例如, a = None
。 檢查not a
很好,將返回True
。 但是len(a) == 0
根本就不行。 相反,您會得到TypeError: object of type 'NoneType' has no len()
。 這是一個完全有效的選項,但if
語句做的事情非常不同,你必須選擇你想要的。
(幾乎)Python 中的所有內容都有__bool__
方法,但並非所有內容都有__len__
。 您必須根據情況決定使用哪一種。 需要考慮的事情是:
a
a 是否是一個序列?if
語句在非序列上崩潰嗎?請記住,使代碼看起來漂亮是正確完成工作的第二位。
試着想想:
if not a:
...
作為簡寫:
if len(a) == 0:
...
我不認為這是一個很好的例子,說明 Python 的 Zen 規則“顯式”優於“隱式”。 這樣做主要是因為可讀性。 並不是說第二個不好,另一個好。 只是第一個比較熟練。 如果您了解 Python 中列表的布爾性質,我認為您會發現第一個是 Python 中更具可讀性和可讀性的計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.