コードスタイルをチェックするライブラリ
- pycodestyle
- flake8
- pylint
Terminalでの使用方法
>>> pycodestyle xxxx.py
>>> flake8 xxxx.py
>>> pylint xxxx.py
Jupyter Notebookでの使用方法
!pycodestyle xxxx.py
!flake8 xxxx.py
!pylint xxxx.py
importの規約
インポートの際、複数のライブラリをカンマでつなげない
import os, csv, sys
1ライブラリ1行使う
# アルファベット順
# 標準・サードパーティ・ローカルパッケージ・ローカルファイルのグループ順
# 各グループごとに1行空ける
# 標準ライブラリ
import csv
import os
import sys
# サードパーティライブラリ
import flask
# ローカルパッケージ
import mylib.funcA
# ローカルファイル
import local_settings
関数のみをインポートしない
# 関数のみをインポートすると、その関数がどのパッケージに属するのかわからなくなる
from pkgA.modA.modB import funcA
# モジュールごとインポートする
import pkgA.modA.modB
スペースの規約
インデントはスペース4つ
if a == b:
print('yes')
辞書型の「:」の後はスペース1つ
d = {'A': 1000}
変数が2つ以上ある場合、「,」の後ろにスペース1つ
def example_func(a, b, c):
print('example')
valA, valB = valB, valA
演算子の前後にスペース
x = y
a = b + c
# ただし、関数宣言時のデフォルト引数はイコール前後にスペース不要
def example_func(a, b, c='test'):
print('example')
行の規約
行のあけ方
# importの下は2行空ける
# グローバルで宣言された関数やクラスの間は2行空ける
# クラス定義内メソッドの間は1行空ける
import os
class ExampleClass(a):
"""ExampleClass"""
def __init__(self, b):
self.b = b
def example_func(c):
"""example_func"""
def sub_example_func(d):
print('hello')
行の終わりにセミコロンをつけない
a = 1;
b = 2:
行の長さは80字を超えない
long_phrase = '80字以上でコーディングすると、非常に長くなって見にくくなるので、80字以内に収めるように記載して、長くなる場合は改行を活用してみやすくすること。'
# 但し、関数内docstringやコメントにURLを掲載する場合は80字超えてもOK
# URLについては改行するとコピーして貼り付けにくくなる
def example_func(a, b, c,
so_long_long_value_should_be_written_by_line_feed='example'):
"""
:param a:
:param b:
:param c:
:param so_long_long_value_should_be_written_by_line_feed:
:return:
Please refer to: http://www.abcdefg.com/hijklmn/opqrstu/vwxyz/again/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
"""
命名規約
クラスや関数の命名規則
# グローバル変数は、全て大文字で単語を「_」でつなぐ
# 大文字を使うことで間違えてグローバル変数を書き換えない目印にする
EXAMPLE_GLOBAL_NAME = 'example'
# クラス名は単語の頭を大文字にして「_」を使わずにつなぐキャメルケース
class ExampleClass(a):
# 関数は小文字の単語を「_」でつなぐスネークケース
def example_func(a):
# プロパティは処理を表すのではなく変数名のように書く
# returnで返すものは「_」をつける
@property
def func_name(self):
return self._func_name
条件文の規約
ifの条件文で()を使う必要がない場合は使わない
if (xxx and yyy):
print('True')
# 但し条件を見やすくする場合は()を使う
if (xxx and yyy) or (aaa or bbb):
print('True')
例外処理の規約
全例外をExceptionにまとめない
# エラーの詳細がわからない
try:
example_func()
except Exception as e:
print(e)
クラスで独自の例外を作成してraiseする
# クラスの名前が例外処理に表示される
# どのファイルでエラーが発生したかわかりやすくなる
class ExampleError(Exception):
def example_err_func(self):
print('Example Error')
def example_func():
try:
func_a()
raise ExampleError
TODOコメントの規約
あとでコード変更予定する時のコメント
# 「#」のあとに1スペースあけてTODOと書く
# さらに1スペースあけて「()」に自分を示す文字列(メアドの@の前等)を入れる
# このコメントにより該当箇所について担当者に質問しやすい上、他の人による書き換えを防ぐ
# 合同プロジェクトやオープンソースプロジェクトなどではメールアドレスをそのまま記載
# TODO (your_name) Will change for fixinig bug no.15