LoginSignup
39
47

More than 1 year has passed since last update.

恥ずかしくないPythonの書き方

Last updated at Posted at 2022-12-17

はじめに

スタンバイのアドベントカレンダー2022のための記事です。
現在、スタンバイでは主にデータサイエンスや機械学習の領域でPython言語をよく利用しています。
ささっと小さいスクリプトを書くにはとても便利だったPythonですが、徐々に大きいサーバーサイドアプリケーションやデータ処理アプリケーションでも利用することが増えてきてしまったので、Pythonの書き方をおさらいしておこうと思います。

前提

人に見られてしまったときに、「なにこれ変なのー」と思われない程度のPythonコードが書けるようになりたい。

まずPEP8から大事なところを抜粋

pep8-ja

  • インデントはスペース4
  • トップレベルの関数やクラスは、行間を2行ずつ空けて定義する
  • クラス内部では、行間を1行ずつ空けてメソッドを定義する
  • ドキュメンテーション文字列は"""で囲み、classdefの行の後に置く(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がおもしろくなってきたので、春休みにもっと勉強してみよう!
39
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
47