我是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