想知道 if not foo is None
是否与 if foo
相同?使用 Python 2.7 和 foo
是一个字符串。
最佳答案
对于空字符串,两者是不同的:
foo = ''
if foo:
print 'if foo is True'
不会打印任何东西,因为它是空的,因此被认为是False
,但是:
if foo is not None:
print 'if not foo is None is True'
将打印,因为 foo
是 not None!
我根据 PEP8 更改了它。 if foo is not None
等同于你的 if not foo is None
但更具可读性,因此被 PEP8 推荐。
关于 Python 中的一般原则的更多信息:
if a is None:
pass
只有 a = None
被显式设置时,if
才会为 True
。
另一方面:
if a:
pass
有几种评估True
的方法:
Python 尝试调用
a.__bool__
,如果实现了,则使用返回值。- 因此
None
、False
、0.0
、0
将评估为False
因为他们的__bool__
方法返回False
。
- 因此
如果
a.__bool__
未实现,则它会检查a.__len__.__bool__
返回的内容。''
、[]
、set()
、dict()
等将评估为False
因为他们的__len__
方法返回0
。这是False
因为bool(0)
是False
。
如果连
a.__len__
都没有实现,那么如果只是返回True
。- 所以所有其他对象/函数/任何东西都是
True
。
- 所以所有其他对象/函数/任何东西都是
另请参阅:truth-value-testing在你的 python 文档中。
关于python - 在 Python 2.7 中检查字符串 "None"或 "not",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952257/