python:decorator

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
python:decorator [2011/06/19 22:33] – [デコレートされた関数の実行] ともやんpython:decorator [2019/08/19 07:02] ともやん
行 122: 行 122:
  デコレータを関数として実行する場合、上記と等価なコードは以下のようになる。  デコレータを関数として実行する場合、上記と等価なコードは以下のようになる。
 <code python> <code python>
-_func_infoを生成 +# func_info(add) は _func_info を返すので 
-print func_info(add) +以下は _func_info(1, 2) を実行しているのと等価
-# _func_infoに引数(1, 2)を与えて実行+
 print func_info(add)(1, 2) print func_info(add)(1, 2)
 </code> </code>
行 198: 行 197:
  
 ===== 引数を必要とするデコレータ ===== ===== 引数を必要とするデコレータ =====
- デコレータが引数を必要とする場合は、関数を二重にラップする必要がある。+ デコレータが引数を必要とする場合は、関数を二重にラップする必要がある。(ここでは inc_doc 引数を追加してみる。)
 <code python> <code python>
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
行 224: 行 223:
     # 引数 func をラップした関数を返却     # 引数 func をラップした関数を返却
     return _func_info     return _func_info
 +</code> 
 + デコレータの引数(inc_docにTrue)を指定してデコレートする。 
 +<code python>
 # デコレートされた関数を定義 # デコレートされた関数を定義
 @func_info(True) @func_info(True)
行 246: 行 247:
 3 3
 </code> </code>
 + デコレータを関数として実行する場合、上記と等価なコードは以下のようになる。 
 +<code python> 
 +# func_info(True) は _func_info を返すので 
 +# func_info(True)(add) は _func_info(add) と等価 
 +# _func_info(add) は __func_info を返すので 
 +# 以下は __func_info(1, 2) を実行しているのと等価 
 +print func_info(True)(add)(1, 2) 
 +</code>
 ===== 参考文献 ===== ===== 参考文献 =====
 <html> <html>
  • python/decorator.txt
  • 最終更新: 2020/02/25 11:14
  • by ともやん