在特定情況下,這三者之間是否有區別?
第一個問是否該變量是任何虛假。除了None
- False
,0
,任何空序列等,這個測試將會失敗。
第二個問是否是魔術單身常量None
。這隻會失敗None
本身。
第三個問是否它認爲自己等於None
。這將失敗,例如,Holder(None)
,其中Holder
是一個包裝類,其實例比較等於他們所持有的任何東西。或者,給出不太現實但較短的代碼例如:
class Stupid(object):
def __ne__(self, other):
return False
Variable = Stupid()
最後一個很少用;事實上,如果你認爲你可能需要檢查== None
或!= None
,並且你還沒有專門創建透明包裝類或類似的東西,那麼你可能真的想要is None
或is not None
。但其他兩個都非常有用和普遍。
如果沒有差別哪一個更適合使用?
那麼,有是的區別,哪一個更適合取決於具體的用途。
在問題的最後,您似乎可能會問在Variable
肯定是None
的具體情況中是否有任何區別。在這種情況下,三者之間當然沒有功能上的區別。*所有這些都保證是錯誤的,因此什麼也不做。這意味着三者之間也沒有區別,也沒有寫任何代碼。這是更簡單,更可讀,更快。
*有一個性能差異 - 第一個不需要LOAD_CONST
None
,或者調用比較運算符。而且,即使你設法重新綁定None
或改變None
常數的值(也許是通過跺腳堆滿?),第一個更有可能仍然有效。但是,這些都不會有影響 - 如果他們再這樣做,那麼代碼根本就不會更快更可靠。
也許他混了'如果x None'和'如果x == None' – jamylak 2013-03-27 05:29:06
是啊,對。感謝提醒 – 2013-03-27 05:29:32
這應該是封閉的,它不是一個真正的問題或重複。 http:// stackoverflow。com/questions/3257919/is-none-vs-none http://stackoverflow.com/questions/7816363/if-a-vs-if-a-is-not-none – jamylak 2013-03-27 05:34:18