Hai hình thức làm bytecode giống hệt nhau, như bạn có thể xác minh rõ ràng:
>>> import dis
>>> dis.dis(compile('if x not in d: pass', '', 'exec'))
1 0 LOAD_NAME 0 (x)
3 LOAD_NAME 1 (d)
6 COMPARE_OP 7 (not in)
9 JUMP_IF_FALSE 4 (to 16)
12 POP_TOP
13 JUMP_FORWARD 1 (to 17)
>> 16 POP_TOP
>> 17 LOAD_CONST 0 (None)
20 RETURN_VALUE
>>> dis.dis(compile('if not x in d: pass', '', 'exec'))
1 0 LOAD_NAME 0 (x)
3 LOAD_NAME 1 (d)
6 COMPARE_OP 7 (not in)
9 JUMP_IF_FALSE 4 (to 16)
12 POP_TOP
13 JUMP_FORWARD 1 (to 17)
>> 16 POP_TOP
>> 17 LOAD_CONST 0 (None)
20 RETURN_VALUE
nên rõ ràng là họ đang ngữ nghĩa giống hệt nhau.
Như một vấn đề về phong cách, PEP 8 không đề cập đến vấn đề.
Cá nhân, tôi rất thích hình thức if x not in y
- làm cho nó ngay lập tức rõ ràng rằng not in
là một toán tử đơn lẻ, và "đọc như tiếng Anh". if not x in y
có thể đánh lừa một số độc giả nghĩ rằng nó có nghĩa là if (not x) in y
, đọc một chút ít như tiếng Anh, và hoàn toàn không có lợi thế bù.
Nguồn
2010-08-14 01:57:19
Hoàn toàn có thể chấp nhận để đóng câu hỏi cũ hơn là bản sao của câu hỏi mới hơn. Xem http: //meta.stackoverflow.com/q/255410, http://meta.stackexchange.com/a/147651 – ThisSuitIsBlackNot