除非我疯了,否则if None not in x和if not None in x是等同的。有没有首选的版本?我猜None not in更像英语,因此更有pythonic风格,但not None in更像其他语言的语法。有没有首选的版本?
发布于 2010-08-31 05:09:33
它们编译成相同的字节码,所以它们是等价的。
>>> 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_VALUEdocumentation还明确指出,这两者是等价的:
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,就不会有歧义。
发布于 2010-08-31 05:14:32
表达式
not (None in x) (为清楚起见,添加了括号)是一个普通的布尔否定。然而,
None not in x是否添加了特殊的语法以提高代码的可读性(这里没有可能,也没有任何意义,在in前面使用和、或等)。如果添加了此特殊情况,请使用它。
同样的情况也适用于
foo is not None与
not foo is None我发现“并不是”读起来更清楚。额外的好处是,如果表达式是更大的布尔表达式的一部分,not的作用域就会立即变得清晰。
https://stackoverflow.com/questions/3604222
复制相似问题