我对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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top