None不在" vs "不在None中

7 投票
2 回答
1547 浏览
提问于 2025-04-16 03:30

我觉得这两个写法其实是一样的,分别是 if None not in xif not None in x。你们觉得哪个更好呢?我觉得 None not in 听起来更像英语,所以更符合 Python 的风格;而 not None in 则更像其他编程语言的写法。大家有没有更喜欢的写法呢?

2 个回答

7

这个表达式

not (None in x) 

(加上括号是为了更清楚)是一个普通的布尔否定。不过,

None not in x

这是为了让代码更易读而添加的特殊语法(在这里没有可能性,也没有意义在“in”前面使用and、or等)。如果这个特殊情况被添加了,就用它。

同样适用于

foo is not None

not foo is None

我觉得“is not”看起来更清晰。如果这个表达式是更大布尔表达式的一部分,not的作用范围也会立刻变得清晰。

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

文档也明确说明这两者是等价的:

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 就没有这种歧义了。

撰写回答