在 Python 2.7 中检查字符串“None”或“not”

新手上路,请多包涵

想知道 if not foo is None 是否与 if foo 相同?使用 Python 2.7 和 foo 是一个字符串。

原文由 Lin Ma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 455
2 个回答

对于空字符串,两者都不同:

 foo = ''
if foo:
    print 'if foo is True'

不会打印任何东西,因为它是 的,因此被认为是 False 但是:

 if foo is not None:
    print 'if not foo is None is True'

将打印,因为 foo 不是 None

我根据 PEP8 更改了它。 if foo is not None 等同于你的 if not foo is None 但更具可读性,因此被 PEP8 推荐。


关于 Python 中的一般原则的更多信息:

 if a is None:
    pass

if 只会是 True 如果 a = None 被显式设置。

另一方面:

 if a:
    pass

当它是 True 时有几种评估方法:

  1. Python 尝试调用 a.__bool__ 如果实现了,则使用返回值。

    • So None , False , 0.0 , 0 will evaluate to False because their __bool__ 方法返回 False
  2. 如果 a.__bool__ 没有实现,那么它会检查 a.__len__.__bool__ 返回的内容。

    • '' , [] , set() , dict() , etc. will evaluate to False because their __len__ 方法返回 0 。这是 False 因为 bool(0)False
  3. 如果甚至 a.__len__ 没有实现,那么如果只是返回 True

    • 所以所有其他对象/功能/无论什么都只是 True

另请参阅:thy python 文档中 的真值测试

原文由 MSeifert 发布,翻译遵循 CC BY-SA 3.0 许可协议

不,当 foo 是一个空字符串时就不一样了。

 In [1]: foo = ''

In [2]: if foo:
   ...:     print 1
   ...:

In [3]: if foo is None:
   ...:     print 2
   ...:

In [4]: if not foo is None:
   ...:     print 3
   ...:
3

原文由 tianwei 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题