您可以清楚地验证:这两种形式构成相同的字节码:
>>> import dis>>> dis.dis(compile('if x not in d: pass', '', 'exec')) 10 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')) 10 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
因此很明显,它们在语义上是相同的。
作为样式问题,PEP 8没有提及该问题。
就我个人而言,我非常喜欢这种
if x not in y形式-可以立即清楚地表明它
not in是单个运算符, 并且 “读起来像英语”。
if not x in y可能会误导一些读者认为这意味着
if (not x) in y,读起来不太像英语,并且绝对没有补偿优势。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)