他们俩都评估 False
但这并不意味着他们是同一回事。
None
是一个独立的价值,它具有自己的类型。一个空字符串是一个没有内容的字符串:
>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False
题
我对Python和编码相对较新。我一直都很好,直到遇到“无”:
variable = None
while variable != "":
print("Why does this loop start?")
虽然看来很简单,但我无法理解为什么上述循环开始。怎么 None
与空字符串不同吗?我以为他们俩都被评估为错误。
解决方案
他们俩都评估 False
但这并不意味着他们是同一回事。
None
是一个独立的价值,它具有自己的类型。一个空字符串是一个没有内容的字符串:
>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False
其他提示
不, None
只是与 None
本身。空字符串不是同一件事:
>>> None == ""
False
None
是一个特殊的单身价值(在Python会话中只有一个副本)表示“空心”,或者缺乏“正确”值。因此是 旗帜 或者 信号 价值; python使用它来表示一个过程没有返回任何内容,例如。
两个都 None
在布尔上下文中,空字符串被认为是错误的:
>>> bool(None)
False
>>> bool("")
False
以及所有空容器(例如空元组,列表或设置)和数字0(无论是整数,浮点还是复杂的数字)。但是,被认为是错误的并不能使它们平等。
如果您想测试 任何 虚假的值,使用:
while not variable:
作为 not
在布尔上下文中解释操作数,并返回逆值:
>>> not ""
True
>>> not None
True
>>> not "not empty"
False
他们都评估为false,但在比较中使用时有所不同
if not None:
print "Always true"
if not "":
print "Always true"
if bool(None) == bool(""):
print "Always true"
if None == "":
pass
#always false