PEP8 のお話
小ネタ。PEP8のお話。
以下の様なコードを考えます。
def f(x, y = 1):
pass
def g(z, w=1):
pass
a = 1
b=1
これを、PythonのコードがPEP8と呼ばれるコーディング規則に則っているか調べてくれる
ツールpep8
を使って解析してみると、以下の様なエラーが出ます。
$ pep8 test.py
test.py:1:11: E251 unexpected spaces around keyword / parameter equals
test.py:1:13: E251 unexpected spaces around keyword / parameter equals
test.py:9:2: E225 missing whitespace around operator
つまり、最初の行のy = 1
と、最後のb=1
が怒られているみたいです。しかし、これは
一見矛盾しているようにも見えます。=
の両端にスペースを入れるか入れないかが、
状況によって異なるみたいです。
PEP8の原文にあたっても、確かにこう書かれています。
Always surround these binary operators with a single space on either side: assignment (=), augmented assignment (+=, -= etc.), comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not), Booleans (and, or, not).
Don't use spaces around the = sign when used to indicate a keyword argument or a default parameter value.
何故このような書き方が推奨されているのか、調べてみました。やはり同じ疑問を持った 人がstackoverflowにいました。
Best Answerによると、
キーワード引数の
=
は変数への代入の際に使う=
とは違うため
だそうです。
まあ確かに言われてみれば違いますよね。キーワード引数に変数が明示的に 与えられなかったときに初めて適用される値ですし。
後は単純に
長くなって冗長だから
という意見もありました。しかしこれだと全ての変数に対しても同じことが言えるのでは
ちなみにpep8
のチェッカーはsudo pip install pep8
で入れられます。