2015-01-15 192 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