性能没有差别,因为它们可以编译为相同的字节码:
>>> import dis
>>> dis.dis("not x is None")
1 0 LOAD_NAME 0 (x)
2 LOAD_CONST 0 (None)
4 COMPARE_OP 9 (is not)
6 RETURN_VALUE
>>> dis.dis("x is not None")
1 0 LOAD_NAME 0 (x)
2 LOAD_CONST 0 (None)
4 COMPARE_OP 9 (is not)
6 RETURN_VALUE
从风格上讲,我尽量避免not x is y
,人类读者可能会误(not x) is y
。如果我写x is not y
那么就不会有歧义。
Google 和Python的样式指南都是最佳做法:
if x is not None:
# Do something about x
not x
使用 x 可能会导致不良结果。
见下文:
>>> x = 1
>>> not x
False
>>> x = [1]
>>> not x
False
>>> x = 0
>>> not x
True
>>> x = [0] # You don't want to fall in this one.
>>> not x
False
您可能有兴趣查看在 Python 中True
或False
编辑下面的评论:
我只是做了一些测试。 not x is None
不会x
,然后再将其与None
进行比较。 is
运算符时,它似乎具有更高的优先级:
>>> x
[0]
>>> not x is None
True
>>> not (x is None)
True
>>> (not x) is None
False
因此,我诚实地认为,最好not x is None
更多编辑:
我只是做了更多的测试,可以确认 bukzor 的评论是正确的。 (至少,我无法证明这一点。)
这意味着, if x is not None
则得到准确的结果,就if not x is None
。我站得住了。谢谢布克佐。
但是,我的答案仍然成立: if x is not None
使用常规方法。 :]
应该首先编写代码,以便程序员首先可以理解,然后再编译器或解释器理解。 “不是” 结构比 “不是” 更像英语。