研究室‎ > ‎卒業生のみなさまへ‎ > ‎真嘉比 愛‎ > ‎Python‎ > ‎

コーディング規約

Pythonのコーディング規約についてまとめます.
主に研究室のPython初心者を対象とした内容です(かなり初歩).
可読性の高いコードを書くことで,研究室内でのPythonコード共有を推進しようという狙いがあります.
※Pylintなどを積極的に活用すると楽!

PEP 8

PEP 8」はPythonのコードスタイルガイドです.ぜひご一読ください.
Pythonに限らず多くのプログラミング言語で採用されている基本的な命名規則等の節もあります.

命名規則

各種変数名は,単純に短くするのではなく,長くても意図のわかりやすい名前にすることが重要です.
各場面に応じていくつかの命名規則スタイルが適用されます.
  • CamelCase
    • クラス名に用いられる.
      • モジュールに大してprivateにする際は,先頭にアンダースコアをつける場合もある.
      • ***Engine,***Types,***Widgetなど,型や特性について伝える単語を使用すると良い.
      • 基底クラスの場合,Base***,Abstract***といった文字列が使用される.
  • mixedCase
    • 一部の標準ライブラリなどで,関数やメソッドの名前に用いられることがある.
  • UPPERCASE,UPPER_CASE_WITH_UNDERSCORES
    • 定数を表すグローバル変数に用いられる.
  • lowercase,lowercase_with_underscores
    • モジュール名に用いられる (lowercaseのみ).
    • publicかつ変更可能なグローバル変数に用いられる.
      • このような変数は自由にさわれないように保護される(大抵の場合はアクセス用の関数が定義される)ため,通常は使用されない.
    • 関数やメソッド内に置かれた変数に用いられる.
    • 関数やメソッドの名前に用いられる.
      • 一部mixedCaseを使用している標準ライブラリもある.
    • 引数名に用いられる.
  • _leading
    • アクセス用関数からしか操作されないようなprivateな変数に用いられる.
      • パブリックな機能を提供するメソッド内でしか使用されず,それ以外の目的に使わない場合.
      • 内部状態を保持する場合.
  • __doubled__
    • 特殊メソッドで用いられる(通常のメソッドで用いてはいけない!).
その他細かい話は以下の通り.
  • bool値を保持する要素名には,hasやisで始まる名前をつける.
    • e.g. is_verb,has_noun → true or false
  • 要素がシーケンスの場合には,複数形を使用する.
    • e.g. sentences = ["Hello World !", "This is my first Python program."]
  • 汎用性の高い名前は避ける(a, b, c…とか間違ってもやめて下さいm(_ _;)m).
    • e.g. data,list,dict,…
  • 辞書型に明示的な名前をつける.
    • e.g. keyが名前,valueが住所の場合 → person_address
  • 既存の名前を避ける.
    • os,sys,re,…
  • クラス名や属性名が一貫性を保つ (冗長にならないようにする等).
    • e.g. SMTP.smtp_send() → SMTP.send()

引数に関する話

  • 既存コードを拡張(改善)する際に引数追加が必要になったら,互換性を保つためにもなるべくデフォルト値を設定する.
  • Pythonは動的な型付けという特性を持つため,関数やメソッドの最初にassert文を使用して,引数の型チェックを行うと良い.
    • e.g. def division(dividend, divisor):
      • assert type(dividend) in (long, int, float)
      • assert type(divisor) in (long, int, float)
      • return dividend / divisor
  • 可変引数(*args,**kw)は関数やメソッドにおける引数情報を曖昧にするため,注意して使用すること.

参考資料

  • エキスパートPythonプログラミング
    • 著者: Tarek Ziadé
    • 訳者: 稲田 直哉,渋川 よしき,清水川 貴之,森本 哲也
    • 出版: アスキー・メディアワークス
Comments