作為一個Pythoner,你真的懂None么?
2024-06-05 加入收藏
先來倆問題
今天上來先問大家兩個問題,考察下大家對None
了解如何:
既然在Python中萬物皆對象,那么 None
是誰的對象呢?或者說None
是什么類型的呢?你知道 None
有什么屬性?或使用過None
的什么方法嗎?
能回答上來嗎?
什么是None?
None是Python中一個特殊的常量;
None與False
、""
、[]
...這些表示空
的概念不同,None表示的是一種虛無
。
None也是某個類型的實例,但是你創建不了另一個None;
None的應用場景
這個....
說實話我用的場景非常單一,就是在聲明變量時不知道該賦什么值就會賦它為None。
就類似于Java中,先給變量定義下類型,但未賦予任何值。
還有一種是在函數中使用return語句時,如果return后面沒有值,會隱式返回None
。這種情況下我們更多的作用是中斷函數的執行,所以并不關心它返回了什么。
?對于
?None
的使用遠不如""
,[]
,{}
,False
來得多。小伙伴如果有更多的應用場景,歡迎評論留言。
剖析下None值到底是什么?
先回答,開篇第一個問題:
?既然在Python中萬物皆對象,那么
?None
是誰的對象呢?或者說None
是什么類型的呢?
答案:
>>> type(None)
<class 'NoneType'>
None是NoneType的實例。
再來第二個問題:
?你知道
?None
有什么屬性?或使用過None
的什么方法嗎?
答案:
>>> dir(None)
['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
對比下False
的內置方法,None真是可憐:
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
我試了幾個內置的魔術方法,希望能提高大家對None的了解:
>>> None.__str__()
'None'
>>> None.__bool__()
False
>>> None.__hash__()
-9223372036573184122
>>> None.__repr__()
'None'
>>> None.__sizeof__()
16
只能有一個None
None作為NoneType的單例,在Python運行的解釋環境中只有一個(解釋器啟動時實例化,解釋器退出時銷毀)
>>> a = None
>>> b = None
>>> a is b
True
>>> id(a)
4505466984
>>> id(b)
4505466984
最后
最后教大家一個沒啥用的None使用場景,看代碼吧:
a = None
b = False
if not a:
print("maishu")
if not b:
print("K")
輸出結果:
maishu
K
?在if、while 等條件語句時,
?None
和False
兩者都表示假值。