簡體   English   中英

Python 之禪“顯式優於隱式”

[英]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 alen(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM