Open ftnext opened 3 years ago
デコレータの挙動について解説。 引数を取ったデコレータの動きがつかめる
https://pycon.jp/2020/timetable/?id=203944
Nakabayashi さん
2021/08/29
関数funcはデコレータを付けて定義した
func.__name__ デコレータの中の関数 (wrapper) が返る! @を使わない func = mydeco(func) でも同じ(デコレータの中の関数が返る)
func.__name__
@
func = mydeco(func)
デコレータの中の関数に置き換わっている! funcの実行はwrapperの実行と同じ
クロージャから始める
関数の外側で定義した変数countを関数の内側で参照し保持している
def counter(): count = 0 def _increment(): nonlocal count count += 1 return count return _increment
countを外から渡す=デコレータの引数
Flaskのルーティング 2重のデコレータ→内側が先
@entry.route("") # <int:id> -> 関数の引数id @login_required def new_entry(): return render_template("...")
[以下はオプション]
__name__
functools.wraps https://docs.python.org/ja/3/library/functools.html#functools.wraps docstringが失われない
functools.wraps
値を取るデコレータ、hogeはfuncという名前がよりわかりやすそう
LeuvenさんのUS PyConトーク 2019 👀
一言でいうと
デコレータの挙動について解説。 引数を取ったデコレータの動きがつかめる
発表資料リンク
https://pycon.jp/2020/timetable/?id=203944
発表者/所属
Nakabayashi さん
発表日付
2021/08/29
概要
シンプルなデコレータ
関数funcはデコレータを付けて定義した
func.__name__
デコレータの中の関数 (wrapper) が返る!@
を使わないfunc = mydeco(func)
でも同じ(デコレータの中の関数が返る)デコレータの中の関数に置き換わっている! funcの実行はwrapperの実行と同じ
デコレータが引数を取る場合
クロージャから始める
関数の外側で定義した変数countを関数の内側で参照し保持している
countを外から渡す=デコレータの引数
実用例
Flaskのルーティング 2重のデコレータ→内側が先
[以下はオプション]
新規性・差分
__name__
(返された関数)を確認する(wrapperに置き換わっている!)トークで知って試したいこと
functools.wraps
https://docs.python.org/ja/3/library/functools.html#functools.wraps docstringが失われない感想
値を取るデコレータ、hogeはfuncという名前がよりわかりやすそう
LeuvenさんのUS PyConトーク 2019 👀