可能重复:
使用“not”和“in”关键字的语法顺序
我的助教声称这e not in c
并不总是产生相同的结果not e in c
(尽管他没有解释原因)。我从来没有亲自在任何人的代码中看到过第二种形式(除了他的书和解释这两者是等价的),也从未见过两者在行为上有所不同,所以我怀疑这种说法。通过谷歌没有找到任何东西,我决定来这里。
那么有没有人有任何关于两者行为不同的情况的信息?
可能重复:
使用“not”和“in”关键字的语法顺序
我的助教声称这e not in c
并不总是产生相同的结果not e in c
(尽管他没有解释原因)。我从来没有亲自在任何人的代码中看到过第二种形式(除了他的书和解释这两者是等价的),也从未见过两者在行为上有所不同,所以我怀疑这种说法。通过谷歌没有找到任何东西,我决定来这里。
那么有没有人有任何关于两者行为不同的情况的信息?
它们完全相同,因为两者都实际应用了not in
比较:
In [25]: def func():
'e' not in 'bee'
....:
....:
In [27]: def func1():
not 'e' in 'bee'
....:
....:
In [29]: dis.dis(func)
2 0 LOAD_CONST 1 ('e')
3 LOAD_CONST 2 ('bee')
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
In [30]: dis.dis(func1)
2 0 LOAD_CONST 1 ('e')
3 LOAD_CONST 2 ('bee')
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
它们是相同的。not
的优先级低于in
,因此not x in y
被解析为not (x in y)
,它返回 的相反值in
,这就是not in
它的作用。