“没有不在”vs“中没有”

时间:2010-08-30 21:05:16

标签: python syntax logic

除非我疯了,if None not in xif not None in x相同。有首选版本吗?我猜None not in更像英语,因此更加pythonic,但not None in更像其他语言语法。有首选版本吗?

2 个答案:

答案 0 :(得分:14)

他们编译为相同的字节码,所以是的,它们是等价的。

>>> import dis
>>> dis.dis(lambda: None not in x)
  1           0 LOAD_CONST               0 (None)
              3 LOAD_GLOBAL              1 (x)
              6 COMPARE_OP               7 (not in)
              9 RETURN_VALUE
>>> dis.dis(lambda: not None in x)
  1           0 LOAD_CONST               0 (None)
              3 LOAD_GLOBAL              1 (x)
              6 COMPARE_OP               7 (not in)
              9 RETURN_VALUE

documentation也清楚地表明两者是等价的:

  

x not in s返回x in s的否定。

如你所说None not in x是更自然的英语,所以我更喜欢使用它。

如果您撰写not y in x,可能不清楚您的意思是not (y in x)还是(not y) in x。如果您使用not in,则没有歧义。

答案 1 :(得分:7)

表达式

not (None in x) 

(为清晰起见而添加的parens)是一个普通的布尔否定。然而,

None not in x

是为更易读的代码添加的特殊语法(这里没有可能,也没有意义,在in前面使用和,等等)。如果添加了这种特殊情况,请使用它。

同样适用于

foo is not None

VS

not foo is None

我发现阅读“不是”更清楚。作为额外的奖励,如果表达式是更大的布尔表达式的一部分,则not的范围立即清楚。