差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| python:decorator [2011/06/19 22:24] – [参考文献] ともやん | python:decorator [2020/02/25 11:14] (現在) – [参考文献] ともやん | ||
|---|---|---|---|
| 行 120: | 行 120: | ||
| 3 | 3 | ||
| </ | </ | ||
| - | デコレートされていない add1 関数の関数ラッパーを生成して、ラッパーに引数を渡して実行しても同じ結果が得られる。 | + | デコレータを関数として実行する場合、上記と等価なコードは以下のようになる。 |
| <code python> | <code python> | ||
| - | def add1(param1, param2): | + | # func_info(add) は _func_info |
| - | u""" | + | # 以下は |
| - | return param1 + param2 | + | print func_info(add)(1, 2) |
| - | + | ||
| - | # _func_infoを生成 | + | |
| - | print func_info(add1) | + | |
| - | # _func_infoに引数(1, 2)を与えて実行 | + | |
| - | print func_info(add1)(1, 2) | + | |
| - | </ | + | |
| - | 実行結果: | + | |
| - | < | + | |
| - | < | + | |
| - | --- func_info --- | + | |
| - | func: < | + | |
| - | args: (1, 2) kwargs: {} | + | |
| - | result: 3 | + | |
| - | ----------------- | + | |
| - | 3 | + | |
| </ | </ | ||
| ===== ドキュメンテーション文字列が失われないようにする(functools.wraps の使い方) ===== | ===== ドキュメンテーション文字列が失われないようにする(functools.wraps の使い方) ===== | ||
| 行 212: | 行 197: | ||
| ===== 引数を必要とするデコレータ ===== | ===== 引数を必要とするデコレータ ===== | ||
| - | デコレータが引数を必要とする場合は、関数を二重にラップする必要がある。 | + | デコレータが引数を必要とする場合は、関数を二重にラップする必要がある。(ここでは inc_doc 引数を追加してみる。) |
| <code python> | <code python> | ||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
| 行 238: | 行 223: | ||
| # 引数 func をラップした関数を返却 | # 引数 func をラップした関数を返却 | ||
| return _func_info | return _func_info | ||
| + | </ | ||
| + | デコレータの引数(inc_docにTrue)を指定してデコレートする。 | ||
| + | <code python> | ||
| # デコレートされた関数を定義 | # デコレートされた関数を定義 | ||
| @func_info(True) | @func_info(True) | ||
| 行 260: | 行 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/ | + | <a target="_blank" |
| - | </ | + | </ |
| + | < | ||
| + | </ | ||
| [[http:// | [[http:// | ||