組み込み開発のためのPython · レッスン 201 / 220
関数と引数の設計
一つの責務を持つ関数を定義し、入力検証と戻り値を明確にします。
処理を関数へ分けると、通信を伴わない部分を個別に試験でき、同じロジックの重複も減らせます。関数が受け取る値と返す結果を明確にします。
一つの関数に一つの目的を持たせる
例えば、応答バイト列の検査とファイル保存を同じ関数に混ぜず、データ解析と入出力を分けます。こうするとハードウェアがない環境でも解析の試験ができます。引数には意味の分かる名前を使い、必要に応じて型注釈と戻り値の型を付けます。
既定引数に変更可能な値を置かない
リストや辞書を既定引数として直接置くと、関数呼び出しの間で同じオブジェクトが共有される問題が起きます。必要なら`None`を既定にし、関数内で新しい値を作ります。入力値を受け取ったら、期待する範囲か検証してから処理します。
コード例
手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。
def decode_status(raw: int, *, width: int = 8) -> dict[str, bool]:
if width <= 0:
raise ValueError("width は正の値が必要です")
mask = (1 << width) - 1
value = raw & mask
return {"ready": bool(value & (1 << (width - 1)))}
print(decode_status(0b1000_0000))手を動かす課題
符号なし整数とビット幅を受け取り、入力が指定幅に収まるか検査する関数を作ってください。