检查Python中的初始化变量

时间:2015-01-15 11:43:21

标签: python python-3.x

我是Python的新手,我正在玩一些代码片段。

在我的代码中,我需要检查变量初始化,我正在使用这个习语:

if my_variable:
    # execute some code

但是在阅读一些帖子后我发现了另一个习惯用法:

if my_variable is not None:
    # execute some code

它们是等效还是存在语义差异?

5 个答案:

答案 0 :(得分:5)

引用Python documentation on boolean operations

  

在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:FalseNone,所有类型的数字零和空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。

因此,如果if my_variable具有上述任何虚假值,my_variable将会失败,而第二个值仅在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)

答案 1 :(得分: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

答案 2 :(得分:1)

值得注意的是,python变量不能是未初始化的。 python中的变量由赋值创建。

如果要检查实际的未初始化,则应通过捕获NameError例外来检查(非)存在。

答案 3 :(得分: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
>>> 

因此它们不等同

答案 4 :(得分:0)

检查变量是否存在在全局字典中,如果不存在则初始化变量。

    if 'ots' not in globals():
        ots=0.0