2015-01-15 138 views
5

我是Python的新手,我正在玩一些代碼片段。在Python中檢查初始化變量

在我的代碼,我需要檢查變量初始化,我就是用這個成語:

if my_variable: 
    # execute some code 

但看完一些帖子,我發現這個其他的成語使用:

if my_variable is not None: 
    # execute some code 

他們是等價還是有一些語義上的差異?

回答

5

引用Python documentation on boolean operations

在布爾操作的上下文中,以及當表達式通過控制流語句中使用的,下面的值被解釋爲假:FalseNone,所有的數字零類型,空字符串和容器(包括字符串,元組,列表,字典,集合和frozensets)。所有其他值都被解釋爲true。

所以,if my_variable將失敗,如果my_variable具有任何上述falsy值,其中作爲第二個將失敗僅當my_variableNone的。通常,變量以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) 
+0

很清楚,非常感謝。 – davioooh

0

以空字符串的一個例子即''這是不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 
>>> 

因此,它們是不等效的

2

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 
+0

很好的例子,謝謝+1 – davioooh

1

值得一提的是Python的變量不能被未初始化。 python中的變量是通過賦值創建的。

如果你想檢查實際的初始化,你應該檢查(非)存在,通過捕獲異常。

+1

對!謝謝! +1 – davioooh