“无不在”与“无不在”
Posted
技术标签:
【中文标题】“无不在”与“无不在”【英文标题】:"None not in" vs "not None in" 【发布时间】:2011-04-05 23:25:40 【问题描述】:除非我疯了 if None not in x
和 if not None in x
是等价的。有首选版本吗?我猜None not in
更偏英语,因此更 Pythonic,但not None in
更像其他语言语法。有首选版本吗?
【问题讨论】:
另见***.com/questions/2710940 如果您只是将 1 个运算符更改为另一个运算符,那么很多关于 SO 的问题都会重复 【参考方案1】:它们编译成相同的字节码,所以是的,它们是等价的。
>>> 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
,则不会有歧义。
【讨论】:
谢谢,不知道你可以这样比较字节码。【参考方案2】:表达式
not (None in x)
(为清楚起见添加了括号)是一个普通的布尔否定。然而,
None not in x
是为更易读的代码添加的特殊语法(这里不可能,也没有意义,在 in 前面使用 and,or 等)。如果添加了这种特殊情况,请使用它。
同样适用
foo is not None
对比
not foo is None
我发现“不是”读起来更清楚。另外,如果表达式是较大布尔表达式的一部分,则 not 的范围会立即明确。
【讨论】:
以上是关于“无不在”与“无不在”的主要内容,如果未能解决你的问题,请参考以下文章