我是Python的新手,我正在玩一些代碼片段。在Python中檢查初始化變量
在我的代碼,我需要檢查變量初始化,我就是用這個成語:
if my_variable:
# execute some code
但看完一些帖子,我發現這個其他的成語使用:
if my_variable is not None:
# execute some code
他們是等價還是有一些語義上的差異?
我是Python的新手,我正在玩一些代碼片段。在Python中檢查初始化變量
在我的代碼,我需要檢查變量初始化,我就是用這個成語:
if my_variable:
# execute some code
但看完一些帖子,我發現這個其他的成語使用:
if my_variable is not None:
# execute some code
他們是等價還是有一些語義上的差異?
引用Python documentation on boolean operations,
在布爾操作的上下文中,以及當表達式通過控制流語句中使用的,下面的值被解釋爲假:
False
,None
,所有的數字零類型,空字符串和容器(包括字符串,元組,列表,字典,集合和frozensets)。所有其他值都被解釋爲true。
所以,if my_variable
將失敗,如果my_variable
具有任何上述falsy值,其中作爲第二個將失敗僅當my_variable
是None
的。通常,變量以None
作爲佔位符值進行初始化,如果在程序的某個時間點不是None
,則它們將知道其他值已分配給它。
例如,
def print_name(name=None):
if name is not None:
print(name)
else:
print("Default name")
這裏,功能print_name
期望一個參數。如果用戶提供,那麼它可能不是None
,所以我們打印用戶傳遞的實際名稱,如果我們沒有通過任何傳遞,默認情況下None
將被分配。現在,我們檢查name
是否不是None
以確保我們打印的是實際名稱而不是Default name
。
注:如果你真的想知道,如果你的變量定義或沒有,你可能會想嘗試這種
try:
undefined_variable
except NameError as e:
# Do whatever you want if the variable is not defined yet in the program.
print(e)
以空字符串的一個例子即''
這是不None
>>> a = ""
>>> if a:
... print (True)
...
>>> if a is not None:
... print (True)
...
True
>>>
和一個布爾值
>>> a = False
>>> if a:
... print (True)
...
>>> if a is not None:
... print (True)
...
True
>>>
因此,它們是不等效的
否if 0
將是假,其中如果my_variable
實際上是0
那麼if my_variable is not None:
會是真的,它會對任何Falsey值都是一樣的。
In [10]: bool([])
Out[10]: False
In [11]: bool(0)
Out[11]: False
In [12]: bool({})
Out[12]: False
In [13]: [] is not None
Out[13]: True
In [14]: 0 is not None
Out[14]: True
很好的例子,謝謝+1 – davioooh
很清楚,非常感謝。 – davioooh