我是Python的新手,我正在玩一些代码片段。
在我的代码中,我需要检查变量初始化,我正在使用这个习语:
if my_variable:
# execute some code
但是在阅读一些帖子后我发现了另一个习惯用法:
if my_variable is not None:
# execute some code
它们是等效还是存在语义差异?
答案 0 :(得分:5)
引用Python documentation on boolean operations,
在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:
False
,None
,所有类型的数字零和空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。
因此,如果if my_variable
具有上述任何虚假值,my_variable
将会失败,而第二个值仅在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)
答案 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