Python:是否与“”相同?

时间:2013-11-07 12:55:56

标签: python type-conversion equality string nonetype

我对Python和Coding比较陌生。我一直很好,直到遇到“无”:

variable = None                          
while variable != "":                    
    print("Why does this loop start?")

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

3 个答案:

答案 0 :(得分:8)

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

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

>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False

答案 1 :(得分:5)

不,None只与None本身相同。空字符串不是一回事:

>>> None == ""
False

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

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

>>> bool(None)
False
>>> bool("")
False

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

如果您要测试任何值为false,请使用:

while not variable:

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

>>> not ""
True
>>> not None
True
>>> not "not empty"
False

答案 2 :(得分:0)

它们都评估为False,但在比较中使用时则不同

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false