我对 Python 和编码比较陌生。在遇到“无”之前,我一直做得很好:
variable = None
while variable != "":
print("Why does this loop start?")
虽然看起来很简单,但我不明白为什么上面的循环开始了。与None
空字符串有何不同?我认为他们都评估为假。
我对 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(无论是整数、浮点数还是复数)也是如此。然而,被认为是错误的并不意味着它们是平等的。
如果您想测试任何为 false 的值,请使用:
while not variable:
asnot
在布尔上下文中解释操作数并返回相反的值:
>>> 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