ここでは、Pythonで文章を書く時のルールについて説明していきます。
ここで紹介しているものは、PEPといってプログラミング言語としてのPythonを作っている団体が正式に勧めている書き方です。つまり、Pythonでプログラムを書く時、見た人が分かりやすいよう、協議が重ねられた結果としてこのようなルールが作られているのです。
ただし、PEP8では、このルールに従うことによって、逆にコードがみづらくなってしまう場合などは、無理にこのルールを採用しなくても良いと述べています。
それでも、エンジニアとしてPythonのコードを書いていくのであれば、検討を重ねて作られているこのルールを可能な限り採用した方が良いでしょう。
それでは、早速一つずつみていきましょう。なお、PEP8は非常に多くのルールを規定していますので、ここでは主要なルールに限ってみていきます。
インデントには、スペースを4つ使う
良い例:
コード1 def plus():
2 return
悪い例:
アウトプット1 def plus():
2 return
悪い例ではインデントが分かりづらく、ブロックがどこまでの範囲なのかよく分かりません。
行を継続する場合は、要素を縦に揃える
良い例:
コードanimal = animalname('dog', 'cat',
'lion', 'monkey')
関数実行時の引数の位置を揃えて見やすくしています。
コードdef this_is_long_function(
one, two, three,
four):
print()
print()関数とインデントのレベルを分け、分かりやすく階層分けしています。
悪い例:
コードanimal = animalname('dog', 'cat',
'lion', 'monkey')
縦に揃っていないので、インデントの意図が分かりづらいです。
コードdef this_is_long_function(
one, two, three,
four):
print()
print()関数とインデントの深さが同じなので、関数のブロックに属するか勘違いしてしまう恐れがあります。
1行の長さは79文字以内にする
これは多くのコードエディタが、80文字で勝手に改行をしてしまうことから、勝手に改行をさせないために79文字以内にするという背景があるようです。
しかし、必ず79文字にしなければいけないかというと、80文字以上を好むチームがあれば、80文字以上を用いても構わない、とPEP8では述べられています。
二項演算子は改行後に書く
これは具体例を見た方が分かりやすいと思いますので、具体例で見ていきましょう。
コード悪い例:
income = base +
latefee +
bonus +
socialwelfare -
penalty
コード良い例:
income = base
+ latefee
+ bonus
+ socialwelfare
- penalty
パッと見で、良い例の方が見やすいことが分かりますよね。
ですので、2項演算子は改行の後に入れるようにしましょう。
関数やクラスは、2行空ける
これも具体例で見ていきましょう。
コードclass Plus():
pass
name = 'John'
hobby = 'fishing'
コードdef plus():
return
name = 'John'
hobby = 'fishing'
クラス内部での関数定義の場合は1行空ける
具体例で見ていきましょう
importは組み込み→第三者→自作の順番で
importを使ってモジュールを読み込む場合、上記の順番で読み込み、それぞれの間を一行空けるようにしましょう。
ワイルドカードを使ったimportはしない
import * のように、ワイルドカードを使ってモジュールをimportするのは避けましょう。
なぜなら、意図しない変数を取り込んでしまうことによりエラーが発生する可能性が高まってしまうからです。
括弧()、中括弧{}、大括弧[]の前後には空白は入れない
具体例で見ていきましょう。
良い例:
コードspam(ham[1], {eggs: 2})
悪い例:
コードspam( ham[ 1 ], { eggs: 2 } )
コンマ、セミコロン、コロンの前に空白を入れない
これも具体例で見ていきましょう。
良い例:
コードa = (5, 6, 7, 8)
悪い例:
コードa = (5 , 6 , 7 , 8)
ただし、コロンはスライスにおいて二項演算子のように振る舞いますので、スペースを入れないようにします。
ham[1:9], ham[1:9:3]といった形です。
また、代入の場合は前後に1つ以上のスペースを入れるようにしましょう。ただし、変数の長さに合わせて=を入れないようにします。(後から長い変数が出てきた時、全ての変数を調整し直さなければいけなくなってしまうからです。)
良い例:
コードx = 1
y = 2
this_variable = 3
悪い例:
コードx = 1
y = 2
this_variable = 3
二項演算子は分かりやすく書く
分かりやすく書くというのが具体的にどういったことか、例で見ていきましょう。
良い例:
コードi = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
悪い例:
コードi=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
優先的に計算させたいものや、ブロックとして意識させたいものを近づけて書き、そうではないものは離して見やすくする、というイメージです。
関数のデフォルト引数はスペースを使わない
具体例で見ていきましょう。
良い例:
コードdef complex(real, img=0.0):
return magic(r=real, i=imag)
悪い例:
コードdef complex(real, img = 0.0):
return magic(r = real, i = imag)
引数にアノテーションが付く場合、引数部分はスペースを入れる
これも具体例で見ていきます。
良い例:
コードdef munge(sep: AnyStr = None):
悪い例:
コードdef munge(sep: AnyStr=None):
一つの行に複数の行を入れない
これも具体例で見ていきましょう
良い例:
コードif foo == 'blah':
do_blah_thing()
悪い例:
コードif foo == 'blah' : do_blah_thing()