Python &引用;“无不在”中;vs";不是“没有”;
除非我疯了,Python &引用;“无不在”中;vs";不是“没有”;,python,syntax,logic,Python,Syntax,Logic,除非我疯了,如果x中没有和如果x中没有是等价的。是否有首选版本?我猜None-not-in更像英语,因此更像python,但not-None-in更像其他语言语法。是否有首选版本?它们编译为相同的字节码,因此是的,它们是等效的 >>> import dis >>> dis.dis(lambda: None not in x) 1 0 LOAD_CONST 0 (None) 3 LO
如果x中没有和如果x中没有是等价的。是否有首选版本?我猜None-not-in
更像英语,因此更像python,但not-None-in
更像其他语言语法。是否有首选版本?它们编译为相同的字节码,因此是的,它们是等效的
>>> 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不在s中
返回s中x的反运算
正如你提到的,None not in x
是更自然的英语,所以我更喜欢用这个
如果您在x中写入而不是y
,可能不清楚您的意思是而不是(x中的y)
还是(不是y)而不是x
。如果在表达式中使用not,则不存在歧义
not (None in x)
(为了清楚起见添加了parens)是一个普通的布尔否定。但是,
None not in x
为更可读的代码添加了特殊语法(在in前面使用and、or等在这里是不可能的,也没有意义)。如果添加了此特殊情况,请使用它
这同样适用于
foo is not None
vs
我发现“不是”读起来更清楚。另外,如果表达式是更大的布尔表达式的一部分,则其范围将立即变得清晰。另请参见,如果您只是将一个运算符更改为另一个运算符,那么许多问题都会重复。Hanks,不知道您可以像这样比较字节码。
not foo is None