読者です 読者をやめる 読者になる 読者になる

simudaru's blog

Python, Rなどのメモを残していこうと思います。  よろしくお願いいたします。

【python】コードの品質管理について その1 pep8

コードの品質管理について少しメモ。

下記を参考にした。
Python Project Howto (日本語訳) — Python Project Howto 日本語訳

pep8

pipでインストール可能
「PEP 8」というスタイルガイドに従っているかチェックしてくれる。
これを使えば、コードのフォーマットを揃えるのに役立つはず。

pypi.python.org


単純な例を示す。

fizzbuzz.py
# coding: utf-8
# ---------------------------------------------------------
# FizzBuzz問題
# ---------------------------------------------------------

def fizzbuzz(x):
    if x % 15 == 0:
        ans = 'FizzBuzz'
    elif x % 3 == 0:
        ans = 'Fizz'
    else:
        ans = 'Buzz'
    return ans

$ pep8 --first fizzbuzz.py

fizzbuzz.py:6:1: E302 expected 2 blank lines, found 1

詳細は以下のようにして確認できる
$ pep8 --show-source --show-pep8 hoge.py

fizzbuzz.py:6:1: E302 expected 2 blank lines, found 1
def fizzbuzz(x):
^
    Separate top-level function and class definitions with two blank lines.

    Method definitions inside a class are separated by a single blank line.

    Extra blank lines may be used (sparingly) to separate groups of related
    functions.  Blank lines may be omitted between a bunch of related
    one-liners (e.g. a set of dummy implementations).

    Use blank lines in functions, sparingly, to indicate logical sections.

    Okay: def a():\n    pass\n\n\ndef b():\n    pass
    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass

    E301: class Foo:\n    b = 0\n    def bar():\n        pass
    E302: def a():\n    pass\n\ndef b(n):\n    pass
    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
    E303: def a():\n\n\n\n    pass
    E304: @decorator\n\ndef a():\n    pass


最初の関数やクラスの前には2行の空白行を開けるらしい。なるほど。

参考にfizzbuzz.pyを直す

fizzbuzz.py
# coding: utf-8
# ---------------------------------------------------------
# FizzBuzz問題
# ---------------------------------------------------------


def fizzbuzz(x):
    if x % 15 == 0:
        ans = 'FizzBuzz'
    elif x % 3 == 0:
        ans = 'Fizz'
    else:
        ans = 'Buzz'
    return ans

$ pep8 --first fizzbuzz.py

fizzbuzz.py:6:1: E302 expected 2 blank lines, found 1

再度実行
$ pep8 --first fizzbuzz.py

メッセージが出なくなればOK。