Order of syntax for using 'not' and 'in' keywords
在测试会员资格时,我们可以使用:
1 | x not in y |
或者:
1 | not y in x |
根据
- 这两种形式总是相同吗?
- 有首选语法吗?
他们总是给出相同的结果。
实际上,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | >>> import dis >>> def notin(): 'ham' not in 'spam and eggs' >>> dis.dis(notin) 2 0 LOAD_CONST 1 ('ham') 3 LOAD_CONST 2 ('spam and eggs') 6 COMPARE_OP 7 (not in) 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE >>> def not_in(): not 'ham' in 'spam and eggs' >>> dis.dis(not_in) 2 0 LOAD_CONST 1 ('ham') 3 LOAD_CONST 2 ('spam and eggs') 6 COMPARE_OP 7 (not in) 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE >>> def not__in(): not ('ham' in 'spam and eggs') >>> dis.dis(not__in) 2 0 LOAD_CONST 1 ('ham') 3 LOAD_CONST 2 ('spam and eggs') 6 COMPARE_OP 7 (not in) 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE >>> def noteq(): not 'ham' == 'spam and eggs' >>> dis.dis(noteq) 2 0 LOAD_CONST 1 ('ham') 3 LOAD_CONST 2 ('spam and eggs') 6 COMPARE_OP 2 (==) 9 UNARY_NOT 10 POP_TOP 11 LOAD_CONST 0 (None) 14 RETURN_VALUE |
我一开始以为他们总是给出相同的结果,但
上面的反汇编揭示了!似乎虽然
The operator
not in is defined to have the inverse true value ofin .—Python documentation
它们的含义相同,但pep8 Python样式指南检查程序更喜欢规则E713中的
E713: test for membership should be
not in
另请参阅"Python
其他人已经明确表示,这两个陈述是相当低的水平。
但是,我不认为任何人都有足够的压力,因为这会让你选择,你应该这样做
选择使代码尽可能可读的表单。
并不一定对任何人都可读,即使这当然是一件好事。不,确保代码尽可能可读,因为您是最有可能在以后回到此代码并尝试阅读它的人。
在Python中,没有区别。而且没有偏好。
从语法上讲,它们是相同的陈述。我会很快说明