• PEP8(Pythonで文章を書く時のルール)

    ここでは、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()