Python“如果x不是None”或“如果不是x is None”?[已关闭]
2022-09-05 01:15:29
没有性能差异,因为它们编译为相同的字节码:
>>> 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 = 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
但是,我的答案仍然成立:如果x不是None
,则使用常规方法。:]