3 回答
TA貢獻1808條經驗 獲得超4個贊
這兩個語句具有非常不同的語義。請記住,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語句的作用非常不同,您必須選擇您想要的。
(幾乎)__bool__Python 中的所有東西都有方法,但并非所有東西都有__len__. 您必須根據情況決定使用哪一種。需要考慮的事情是:
你已經驗證是否
a是一個序列了嗎?你需要嗎?
您介意您的
if語句因非序列而崩潰嗎?您是否想將其他虛假對象視為空列表來處理?
請記住,讓代碼看起來漂亮比正確完成工作要重要。
TA貢獻1804條經驗 獲得超3個贊
雖然這個問題很老了,但我想提供一個觀點。
在動態語言中,我的偏好是始終描述變量的預期類型和目標,以便提供更多的目的理解。然后盡可能使用語言知識來簡潔并增加可讀性(在Python中,空列表的布爾結果為假)。因此代碼:
lst_colours = []
if not lst_colours:
print("list is empty")
更好地傳達含義是使用變量進行非常具體的檢查。
lst_colours = []
b_is_list_empty = not lst_colours
if b_is_list_empty:
print("list is empty")
在代碼庫中多次檢查列表是否為空是很常見的事情。因此,在單獨的文件輔助函數庫中實現更好的功能。從而隔離常見的檢查,并減少代碼重復。
lst_colours = []
if b_is_list_empty(lst_colours):
print("list is empty")
def b_is_list_empty (lst):
......
最重要的是,盡可能多地添加含義,有一個商定的公司標準來選擇如何處理簡單的事情,例如變量命名和隱式/顯式代碼選擇。
TA貢獻1815條經驗 獲得超10個贊
試著想一想:
if not a: ...
作為以下形式的簡寫:
if len(a) == 0: ...
我不認為這是 Python 禪宗規則“顯式”優于“隱式”的一個很好的例子。這樣做主要是為了可讀性。并不是說第二個是壞的,另一個是好的。只是第一個更有技巧而已。如果你了解 Python 中列表的布爾性質,我想你會發現第一個在 Python 中更具可讀性和可讀性。
添加回答
舉報
