差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン | ||
python:decorator [2011/06/19 22:33] – [デコレートされた関数の実行] ともやん | python:decorator [2020/02/25 11:13] – [参考文献] ともやん | ||
---|---|---|---|
行 122: | 行 122: | ||
デコレータを関数として実行する場合、上記と等価なコードは以下のようになる。 | デコレータを関数として実行する場合、上記と等価なコードは以下のようになる。 | ||
<code python> | <code python> | ||
- | # _func_infoを生成 | + | # func_info(add) |
- | print func_info(add) | + | # 以下は |
- | # _func_infoに引数(1, 2)を与えて実行 | + | |
print func_info(add)(1, | print func_info(add)(1, | ||
</ | </ | ||
行 198: | 行 197: | ||
===== 引数を必要とするデコレータ ===== | ===== 引数を必要とするデコレータ ===== | ||
- | デコレータが引数を必要とする場合は、関数を二重にラップする必要がある。 | + | デコレータが引数を必要とする場合は、関数を二重にラップする必要がある。(ここでは inc_doc 引数を追加してみる。) |
<code python> | <code python> | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
行 224: | 行 223: | ||
# 引数 func をラップした関数を返却 | # 引数 func をラップした関数を返却 | ||
return _func_info | return _func_info | ||
+ | </ | ||
+ | デコレータの引数(inc_docにTrue)を指定してデコレートする。 | ||
+ | <code python> | ||
# デコレートされた関数を定義 | # デコレートされた関数を定義 | ||
@func_info(True) | @func_info(True) | ||
行 246: | 行 247: | ||
3 | 3 | ||
</ | </ | ||
+ | デコレータを関数として実行する場合、上記と等価なコードは以下のようになる。 | ||
+ | <code python> | ||
+ | # func_info(True) は _func_info を返すので | ||
+ | # func_info(True)(add) は _func_info(add) と等価 | ||
+ | # _func_info(add) は __func_info を返すので | ||
+ | # 以下は __func_info(1, | ||
+ | print func_info(True)(add)(1, | ||
+ | </ | ||
===== 参考文献 ===== | ===== 参考文献 ===== | ||
< | < | ||
- | <iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank& | + | < |
</ | </ | ||
[[http:// | [[http:// |