web-dev-qa-db-ja.com

PEP 8では、関数の引数で演算子の周りに空白が必要ですか?

私はこのコードを持っています:

some_list = range(a, b+1)

vim用のpep8プラグイン でコーディングスタイルを確認した後、次の警告が表示されました:

missing whitespace around operator

PEP 8に準拠しているようですが、代わりにこれを書く必要がありますか?

some_list = range(a, b + 1)

しかし、私は PEP 8-Python Code のスタイルガイド)を何度か読みましたが、上記の警告に適用されたルールを見つけることができません。

だから私は知りたい:PEP-8スタイルを使用するとき、関数の引数で演算子(+、-、*、/など)の周りに空白が必要ですか?

28
wxl24life

http://www.python.org/dev/peps/pep-0008/#other-recommendations

これらの2項演算子は常に両側に単一のスペースで囲みます:代入(=)、拡張代入(+ =、-=など)、比較(==、<、>、!=、<>、<=、> =) 、in、not in、is、is not)、ブール値(and、or、not)。

その例外は、=は、名前付きパラメーターを設定するために使用されます。

編集:

Pythonの標準ライブラリのソースコードを調べたところ、上記のシナリオの発生が見つかりました。

http://hg.python.org/cpython/file/9ddc63c039ba/Lib/json/decoder.py#l2

            end = _w(s, end + 1).end()
17
mustafa.0x

2013年に尋ねたとき、Vimプラグインは間違っていました...しかし、それが作成された2010年に正しかったです。 PEP 8には 数回変更 があり、質問への回答も変更されました。

当初、PEP 8には次のフレーズが含まれていました。

算術演算子の周りにスペースを使用する

thatルールの下で、

range(a, b+1)

間違いなく間違っているので、

range(a, b + 1)

これは、 pycodestyle (Python linter、以前はpep8.pyと呼ばれていましたが、アスカーの Vimプラグイン が内部で使用するルール)です。 )数年間実施されました。

ただし、2012年4月に これは変更されました です。裁量の余地のない単純明快な言葉は、次のようなよりウールのアドバイスに置き換えられました。

優先度の異なる演算子を使用する場合は、優先度が最も低い演算子の周りに空白を追加することを検討してください。あなた自身の判断を使用してください。ただし、2つ以上のスペースを使用しないでください。また、2項演算子の両側に常に同じ量の空白があります。

紛らわしいことに、このルールを示す例は元々変更されていません(したがって、散文に矛盾しています)。これは 最終的には修正されましたが、あまりよくありません であり、例は紛らわしいままであり、散文よりもはるかに厳密で主観的でない規則を暗示しているようです。

特定の演算子の前後に空白を必要とするルールはまだあります:

これらの2項演算子は常に、両側を1つのスペースで囲みます:割り当て(=)、拡張割り当て(+=-=など)、比較(==<>!=<><=>=innot inisis not)、ブール値(andornot)。

ただし、このルールはそれが参照する演算子と+のような算術演算子がリストにnotであるかについて明示的であることに注意してください。

したがって、PEPは、現在の形式ではではなくで、+演算子(または他の算術演算子)の周りにスペースを使用する必要があるかどうかが決まります*/**など)。 「自分の判断で」自由です。

ちなみに、pycodestyleリンター PEPの変更を反映するために2012年後半に動作を変更 は、演算子の周りの空白の使用に関するルールを2つのエラーコードE225(周囲の空白の使用に失敗した場合)に分離しますPEP 8がまだを必要とする演算子(== --- ==)デフォルトでオンになっている空白)、およびE226(算術演算子の周りに空白を使用できない場合)は無視されますデフォルトでは。ここの質問者は、2013年にこの質問をしたときに、少し古いバージョンのリンターを使用していたはずです。

46
Mark Amery

算術演算子の場合、通常は+と-の前後にスペースを入れますが、*、**、/には入れません。次に例を示します。

(...)
alpha__w = (wave__w - central_w_par*doppler_factor)/sig_par
e1__w = np.exp(-.5*(alpha__w**2))
Y1__w = norm*e1__w/(sig_par*(2*np.pi)**.5)
(...)