None不在" vs "不在None中
我觉得这两个写法其实是一样的,分别是 if None not in x
和 if 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
就没有这种歧义了。