はじめに
スタンバイのアドベントカレンダー2022のための記事です。
現在、スタンバイでは主にデータサイエンスや機械学習の領域でPython言語をよく利用しています。
ささっと小さいスクリプトを書くにはとても便利だったPythonですが、徐々に大きいサーバーサイドアプリケーションやデータ処理アプリケーションでも利用することが増えてきてしまったので、Pythonの書き方をおさらいしておこうと思います。
前提
人に見られてしまったときに、「なにこれ変なのー」と思われない程度のPythonコードが書けるようになりたい。
まずPEP8から大事なところを抜粋
- インデントはスペース4
- トップレベルの関数やクラスは、行間を2行ずつ空けて定義する
- クラス内部では、行間を1行ずつ空けてメソッドを定義する
- ドキュメンテーション文字列は
"""
で囲み、class
やdef
の行の後に置く(docstring) - 命名規則
- モジュールの名前は全て小文字で短く、アンダースコアを使うのも推奨されない
- クラスの名前はCapWords方式
- 型変数もCapWords方式
- 関数や変数は小文字のみ、単語をアンダースコアで区切る
- 公開されていないメソッドやインスタンス変数にだけ、アンダースコアを先頭に付ける
- 定数は全て大文字で、単語をアンダースコアで区切る
- インスタンスメソッドの引数の一つ目の引数は常に
self
- クラスメソッドの一つ目の引数は常に
cls
- プログラミングでの推奨事項
- シングルトンとの比較には
is
is not
を使う。等価演算子は使わない - 型の比較は
isinstance()
を使う -
try...finally
の中でreturn / break / continue
は使わない
- シングルトンとの比較には
ディレクトリ構造
フレームワークを使うときはそれに準ずるが、何もないときは
myproject
|- myproject
| |- __init__.py
| |- __main__.py
|- docs
|- tests
| |- test_cat.py
srcディレクトリではないらしい
Type Hintsを使おう
def check_cat(cry: str) -> bool:
return cry == 'ニャー'
dataclass機能が便利
@dataclass
class Animal:
cry: str
def check_cat(animal: Animal) -> bool:
return animal.cry == 'ニャー'
check_cat(Animal('ワン')) # False
ファイルを扱うときはwith文を使おう
with open("cat.txt", "w") as file:
file.write("ニャー")
リソースの閉じ忘れを防げる
条件式にandを使わず範囲指定できるのがすてき
a = 1
if 0 < a < 2:
print('ニャー')
入力値のバリデーションとか読みやすくできそう
三項演算子がいつもと違う
cat = True
print("ニャー" if cat else "ワン") # ニャー
いつもの言語と違うので注意する
その他
- 文法チェックにはflake8を使おう
- コードフォーマットにはblackを使おう
- import文はisortにきれいに書き直してもらおう
- Poetryでライブラリの依存関係を管理しよう
- mypyで型をチェックしよう
- radon / xenon でシンプルなコードを維持しよう
- Pythonがおもしろくなってきたので、春休みにもっと勉強してみよう!