私は両方の方法でそれを見てきましたが、どちらの方法がより Pythonic ですか?
a = [1, 2, 3]
# version 1
if not 4 in a:
print 'is the not more pythonic?'
# version 2
if 4 not in a:
print 'this haz more engrish'
より良いPythonと見なされる方法はどれですか?
私は両方の方法でそれを見てきましたが、どちらの方法がより Pythonic ですか?
a = [1, 2, 3]
# version 1
if not 4 in a:
print 'is the not more pythonic?'
# version 2
if 4 not in a:
print 'this haz more engrish'
より良いPythonと見なされる方法はどれですか?
2 番目のオプションは、次の 2 つの理由からより Pythonic です。
これは1 つの演算子であり、1 つのバイトコード オペランドに変換されます。他の行は本当にnot (4 in a)
です。2人のオペレーター。
たまたま、Pythonは後者のケースを最適化し、とにかく変換not (x in y)
しますが、それは CPython コンパイラの実装の詳細です。x not in y
ほとんどの人は、それ4 not in a
がより Pythonic であることに同意するでしょう。
Python は、理解しやすく理解しやすいことを目的として設計されており4 not in a
、英語での言い方のように聞こえます。Python の意味を理解するのに、Python の知識は必要ありません。
バイトコードに関しては、この 2 つは CPython で同じになることに注意してください (not in
技術的には単一の演算子ですnot 4 in a
が、最適化の対象となります)。
>>> import dis
>>> def test1(a, n):
not n in a
>>> def test2(a, n):
n not in a
>>> dis.dis(test1)
2 0 LOAD_FAST 1 (n)
3 LOAD_FAST 0 (a)
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> dis.dis(test2)
2 0 LOAD_FAST 1 (n)
3 LOAD_FAST 0 (a)
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
not in
の方が広く使われていると思います。
PEP 8 スタイル ガイドではこのトピックについて明示的に説明していませんが、独自の比較演算子not in
であると見なされています。
The Zen of Python を忘れないでください。Python を書く際の中心的な信条の 1 つは、「読みやすさが重要」であるため、コードを読んで理解するのが最も明確な選択を行ってください。