亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 之禪“顯式優于隱式”

Python 之禪“顯式優于隱式”

月關寶盒 2023-09-12 15:10:24
我試圖理解“隱式”和“顯式”在 Python 上下文中的真正含義。a = []# my understanding is that this is implicitif not a:   print("list is empty")# my understanding is that this is explicitif len(a) == 0:   print("list is empty")我試圖遵循Python 的禪宗規則,但我很好奇這是否適用于這種情況,或者我是否想得太多了?
查看完整描述

3 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

這兩個語句具有非常不同的語義。請記住,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語句的作用非常不同,您必須選擇您想要的。

(幾乎)__bool__Python 中的所有東西都有方法,但并非所有東西都有__len__. 您必須根據情況決定使用哪一種。需要考慮的事情是:

  • 你已經驗證是否a是一個序列了嗎?

  • 你需要嗎?

  • 您介意您的if語句因非序列而崩潰嗎?

  • 您是否想將其他虛假對象視為空列表來處理?

請記住,讓代碼看起來漂亮比正確完成工作要重要。


查看完整回答
反對 回復 2023-09-12
?
狐的傳說

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):

  ......

最重要的是,盡可能多地添加含義,有一個商定的公司標準來選擇如何處理簡單的事情,例如變量命名和隱式/顯式代碼選擇。


查看完整回答
反對 回復 2023-09-12
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

試著想一想:

if not a:
    ...

作為以下形式的簡寫:

if len(a) == 0:
    ...

我不認為這是 Python 禪宗規則“顯式”優于“隱式”的一個很好的例子。這樣做主要是為了可讀性。并不是說第二個是壞的,另一個是好的。只是第一個更有技巧而已。如果你了解 Python 中列表的布爾性質,我想你會發現第一個在 Python 中更具可讀性和可讀性。


查看完整回答
反對 回復 2023-09-12
  • 3 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號