【Python】 動的なデフォルト引数を指定するときにはNoneとドキュメンテーション文字列を使う
書籍”Effective Python”項目15のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。
Pythonはデフォルト引数をモジュールロード時の一回しか評価しないので、動的な値をデフォルト引数にはしないように、という話でした。
from datetime import datetime import time # 動的な型をデフォルト引数にしてみる def bad_example(when=datetime.now()): print(when) # 時刻が表示される bad_example() # 一秒待つ time.sleep(1) # 上と同じ時刻が表示される bad_example()
書籍ではこのような時はデフォルト引数にNoneを指定してドキュメンテーション文字列で振る舞いを書いておくことを勧めています。
def good_example(when=None): """ when: datetime of when the function is called. Defaults to the present time. """ when = datetime.now() if when is None else when print(when)
Effective Python ―Pythonプログラムを改良する59項目
- 作者: Brett Slatkin,石本敦夫,黒川利明
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/23
- メディア: 大型本
- この商品を含むブログ (5件) を見る