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

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

不是沒有在Python中進行測試

不是沒有在Python中進行測試

慕妹3146593 2019-11-21 14:06:56
這些不是“無”測試。if val != None:if not (val is None):if val is not None:哪一個更可取,為什么?
查看完整描述

3 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

if val is not None:

    # ...

是用于測試未將變量設置為的Python慣用法None。在用默認參數聲明關鍵字函數的情況下,該慣用法有特殊用途。is在Python中測試身份。因為None正在運行的Python腳本/程序中只有一個實例,所以這是is最佳測試。正如Johnsyweb指出的那樣,這在PEP 8中的 “編程建議”中進行了討論。


至于為什么這是首選


if not (val is None):

    # ...

這只是Python Zen的一部分:“可讀性很重要”。好的Python通常接近好的偽代碼。


查看完整回答
反對 回復 2019-11-21
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

來自PEP 8編程建議:


與單例(如None)的比較應始終使用“是”或“不是”進行,永遠不要使用相等運算符進行。


另外,當您真正的意思是“如果x不是None”時,要當心寫“ if x”-例如,在測試是否將默認為None的變量或參數設置為其他值時。另一個值可能具有在布爾上下文中可能為false的類型(例如容器)!


對于任何Python程序員來說,PEP 8都是必不可少的書籍。


查看完整回答
反對 回復 2019-11-21
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

這些問題的最佳選擇是確切地了解python的功能。該dis模塊提供了令人難以置信的信息:


>>> def f(val):

...   if val != None:

...     return True

...   return False

...

>>> def g(val):

...   if not (val is None):

...     return True

...   return False

...

>>> def h(val):

...   if val is not None:

...     return True

...   return False

...

>>> import dis

>>> dis.dis(f)

  2           0 LOAD_FAST                0 (val)

              3 LOAD_CONST               0 (None)

              6 COMPARE_OP               3 (!=)

              9 POP_JUMP_IF_FALSE       16


  3          12 LOAD_GLOBAL              1 (True)

             15 RETURN_VALUE


  4     >>   16 LOAD_GLOBAL              2 (False)

             19 RETURN_VALUE

>>> dis.dis(g)

  2           0 LOAD_FAST                0 (val)

              3 LOAD_CONST               0 (None)

              6 COMPARE_OP               9 (is not)

              9 POP_JUMP_IF_FALSE       16


  3          12 LOAD_GLOBAL              1 (True)

             15 RETURN_VALUE


  4     >>   16 LOAD_GLOBAL              2 (False)

             19 RETURN_VALUE

>>> dis.dis(h)

  2           0 LOAD_FAST                0 (val)

              3 LOAD_CONST               0 (None)

              6 COMPARE_OP               9 (is not)

              9 POP_JUMP_IF_FALSE       16


  3          12 LOAD_GLOBAL              1 (True)

             15 RETURN_VALUE


  4     >>   16 LOAD_GLOBAL              2 (False)

             19 RETURN_VALUE

請注意,最后兩種情況簡化為相同的操作順序(python讀取not (val is None)并使用該is not運算符)。!=與無比較時,第一個使用運算符。


正如其他答案所指出的那樣,!=在與“無”進行比較時使用“


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 469 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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