Python:是否与""相同?

use*_*232 -1 python string equality type-conversion nonetype

我对Python和Coding比较陌生.我一直很好,直到遇到"无":

variable = None                          
while variable != "":                    
    print("Why does this loop start?")
Run Code Online (Sandbox Code Playgroud)

虽然看起来很简单但我无法理解为什么上面的循环开始了.如何None为空字符串不同?我以为他们都评价为False.

Sim*_*ser 8

他们都评价,False但这并不意味着他们是一回事.

None是一个单独的值,它有自己的类型.空字符串是没有内容的字符串:

>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

不,None只是和None自己一样.空字符串不是一回事:

>>> None == ""
False
Run Code Online (Sandbox Code Playgroud)

None是一个特殊的单例值(Python会话中只有一个副本)表示"空白",或缺少"正确"值.因此它是一个标志信号值; 例如,Python按惯例使用它来表示进程没有返回任何内容.

None在布尔上下文中,两者和空字符串都被视为false:

>>> bool(None)
False
>>> bool("")
False
Run Code Online (Sandbox Code Playgroud)

与所有空容器(例如空元组,列表或集合)和数字0(可以是整数,浮点数或复数)一样.然而,被认为是错误并不能使它们平等.

如果要测试任何错误的值,请使用:

while not variable:
Run Code Online (Sandbox Code Playgroud)

as not在布尔上下文中解释操作数并返回反向值:

>>> not ""
True
>>> not None
True
>>> not "not empty"
False
Run Code Online (Sandbox Code Playgroud)