我可以使用:

if A:

而不是

if A is not None:

后者似乎太啰嗦了。有区别吗?


当前回答

Python >= 2.6,

如果我们写如

if A:

将生成如下警告:

FutureWarning:该方法的行为将来会改变 版本。使用特定的'len(elem)'或'elem is not None'测试 代替。

所以我们可以用

if A is not None:

其他回答

前者更Pythonic(更好的理想代码),但如果A为False(不是None),则不会执行块。

我看过的大多数指南都建议你应该使用

如果一个:

除非你有理由说得更具体些。

有一些细微的差别。除了None,还有其他返回False的值,例如空列表或0,所以要考虑一下你真正要测试的是什么。

if A:如果A为0,false,空字符串,空列表或None,将证明为假,这可能导致不希望的结果。

该声明

if A:

将调用A.__bool__()(参见特殊方法名称文档),在Python 2中称为__nonzero__,并使用该函数的返回值。总结如下:

object.__bool__(自我) 调用来实现真值测试和内置操作bool();应该返回False或True。如果没有定义此方法,则调用__len__(),如果对象的结果是非零,则认为该对象为真。如果一个类既没有定义__len__()也没有定义__bool__(),则它的所有实例都被认为是真。

另一方面,

if A is not None:

只比较引用A和None,看它们是否相同。

if x: #x is treated True except for all empty data types [],{},(),'',0 False, and None

所以它不等于

if x is not None # which works only on None