Variable = None
在特定情况下,这三者之间有什么区别吗?如果没有区别,哪个更适合使用?
if Variable:
print "Hello world"
和
if Variable is not None:
print "Hello world"
和
if Variable != None:
print "Hello world"
在无变量的情况下是否相同?
Variable = None
在特定情况下,这三者之间有什么区别吗?如果没有区别,哪个更适合使用?
if Variable:
print "Hello world"
和
if Variable is not None:
print "Hello world"
和
if Variable != None:
print "Hello world"
在无变量的情况下是否相同?
在特定情况下,这三者之间有什么区别吗?
第一个询问变量是否是虚假的。None
除了-<code>False, 0
, 任何空序列等之外,此测试将失败。
第二个询问是否是魔术单例常量None
。这只会为None
自己失败。
第三个询问是否有任何东西认为自己等于None
。例如,这将失败Holder(None)
,其中Holder
是一个包装器类,其实例比较等于它们所持有的任何东西。或者,给出一个不太现实但更短的代码示例:
class Stupid(object):
def __ne__(self, other):
return False
Variable = Stupid()
最后一个很少有用;事实上,如果你认为你可能需要检查== None
or != None
,并且你没有专门创建透明包装类或类似的东西,你可能真的想要is None
or is not None
。但其他两个都非常有用和常见。
如果没有区别,哪个更适合使用?
嗯,还是有区别的,看具体用途,哪个更合适。
在问题的最后,您似乎可能会问在 where Variable
is absolute的特定情况下是否有任何区别None
。在那种情况下,这三者之间当然没有功能上的区别。*它们都保证为假,因此什么也不做。这意味着这三者中的任何一个与根本不编写代码之间也没有区别。这更简单,更易读,更快。
* 存在性能差异——第一个不必LOAD_CONST
使用None
, 或调用比较运算符。而且,即使您以某种方式设法重新绑定None
或更改了None
常量的值(可能是通过在整个堆上踩ctypes
?),第一个更有可能仍然有效。但这些都无关紧要——而且,如果他们这样做,再一次,没有任何代码会更快、更可靠。
not x
如果x
is None
, False
, []
, {}
, 等则为真。
x is not None
将永远是True
,除非变量实际上是None
。
编辑:
当您想检查变量是否实际设置为正确值时,这具有实际重要性。否则你可能会遇到问题。例如,如果您想评估项目列表并执行以下操作:
if not x:
检查是否提供了一个列表,然后条件将在一个空列表上触发,这可能仍然是一个有效的输入。所以在这种情况下,你想检查
if x is not None:
允许空列表作为有效输入,但仍然检查根本没有提供列表的情况。
该None
值本身与某些语言中的 anull
或值相当。nil
它是已定义变量中缺少值的占位符(如果未定义,它将抛出NameError
)。这就是为什么None
在某些情况下将该值用作默认值的原因:
>>> def foo():
... pass
...
>>> x = foo()
>>> x is None
True
它也经常用作可选变量的默认值:
>>> def foo(bar=None):
... if bar is None:
... print('No argument passed.')
... else:
... print('Variable bar: %s' % str(bar))
...
>>> foo(0)
Variable bar: 0
>>> foo()
No argument passed.
这样,0
仍然是一个有效值,False
如果使用if not bar:
.
PEP 8的官方建议是通过身份检查来测试None :
if Variable is not None:
print "Hello world"
平等/不平等测试也可以工作,但速度较慢且不习惯:
if Variable != None:
print "Hello world"
测试变量的布尔值会产生不同的结果。如果变量是空容器或等于零的数字,则以下测试将打印“hello world”:
# Hello world won't print for any of these values:
for Variable in (), '', u'', {}, [], 0, 0.0, 0j, None:
if Variable:
print "Hello world"
它们不一样。not
检查是否bool(var)
评估为False
.
例如。
>>> not ''
True
>>> not 'abc'
False
>>> not 0
True
if x is None
检查 x 是否是None
它自己。