コーディングスタイル
コーディングスタイルとはpythonのコードを書く上でのお作法と言う意味です。
この目的は可読性が高く第三者にとっても読み易いコードを書くためです。そのために共通のルールを定めたものがコーディングスタイルです。
以下は公式ドキュメントのチュートリアルに記載されたコーディングスタイルの一節を参照しています。
インデント
- インデントには空白4つを使い、タブは使わないこと。
汎用のテキストエディタを使ってpythonのコードを作成する際にはこの点を注意する必要があります。
jupyter labやjupyter notebookを使用していれば、タブは自動的に半角空白4個に置き換えられますので、この点を気にする必要はありません。
1行の最大文字数
- ソースコードの幅が 79 文字を越えないように行を折り返すこと。
これは小さいディスプレイを使うユーザにも読み易くするための配慮です。
jupyter labでは画面右下のColで文字数の位置を確認することができます。
改行して内容(論理行)を継続したい場合は、バックスラッシュ(\)を記載して改行します。
if isinstance(m, int) and isinstance(n, int) \
and (m > 0) and (n > 0):
この場合、バックスラッシュの後は改行以外は入れてはいけません。スペースやコメント文が入っているとSyntaxErrorとなります。
丸括弧()や角括弧[]、波括弧{}の中であれば途中改行しても内容(論理行)は継続されます。
if (isinstance(m, int) and isinstance(n, int) # この場合はコメントを挿入可能
and (m > 0) and (n > 0)):
ls = [[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23]]
この場合は改行の後にコメント文を入れることも可能です。また括弧内の改行後はインデントも自由に設定することができます。
空白、空白行、コメントなど
- 関数やクラスや関数内の大きめのコードブロックの区切りに空行を使うこと。
- 可能なら、コメントは行に独立で書くこと。
- 演算子の前後とコンマの後には空白を入れ、括弧類のすぐ内側には空白を入れないこと。(例)
a = f(1, 2) + g(3, 4)
これらはある程度センスの問題になるかと思います。行の終わりにコメント文を入れることは公式ドキュメント内にも結構見られますので、どこまで忠実にこれを守るかは各自の判断次第です。
クラス、関数名
- クラスや関数に一貫性のある名前を付けること。慣習では UpperCamelCase をクラス名に使い、 lowercase_with_underscores を関数名やメソッド名に使うこと。
クラスは基礎編で紹介しますが、クラス名には UpperCamelCase (先頭大文字の単語を空白なしで接続)、関数名には lowercase_with_underscores (小文字をアンダースコア _ で接続)を使用することを推奨しています。
エンコーディング
- あなたのコードを世界中で使ってもらうつもりなら、風変りなエンコーディングは使わないこと。どんな場合でも、Python のデフォルト UTF-8 またはプレーン ASCII が最も上手くいきます。
- 同様に、ほんの少しでも他の言語を話す人がコードを読んだりメンテナンスする可能性があるのであれば、非 ASCII 文字も識別子に使うべきではありません。
エンコーディングは、Python のデフォルト UTF-8を使用しましょう。また識別子(変数名や関数名、クラス名)として全角文字を使用することは止めましょう。
ドキュメンテーション文字列(docstring)
- docstring を使うこと。
defによる関数定義の処理文の冒頭に記載されるdocstringをなるべく使用するように推奨されています。以下は公式ドキュメントのチュートリアルに記載されたdocstringの書き方に関するお作法です。
- 最初の行は、常に対象物の目的を短く簡潔にまとめたものでなくてはなりません。簡潔に書くために、対象物の名前や型を明示する必要はありません。名前や型は他の方法でも得られるからです (名前がたまたま関数の演算内容を記述する動詞である場合は例外です)。最初の行は大文字で始まり、ピリオドで終わっていなければなりません。
- ドキュメンテーション文字列中にさらに記述すべき行がある場合、二行目は空行にし、まとめの行と残りの記述部分を視覚的に分離します。つづく行は一つまたはそれ以上の段落で、対象物の呼び出し規約や副作用について記述します。
参照:https://docs.python.org/ja/3/tutorial/controlflow.html#documentation-strings