pythonのデコレータについて

pythonのデコレータについて紹介します。

デレコータは、javaの Spring Framework のAOPだなと思いました。

AOPについて知りたい方は、 ここを参照してください。

  • デコレータのコード

    >>> def document_it(func):
    ...     def new_function(*args, **kwargs):
    ...         print('Runting function:', func.__name__)
    ...         print('Positional arguments:', args)
    ...         print('Keyword arguments:', kwargs)
    ...         result = func(*args, **kwargs)
    ...         print('Result:', result)
    ...         return result
    ...     return new_function
    

関数の実行する前と実行した後に、引数と返り値をprint()するデコレータです。

  • デレコートする前のコードと実行結果

    >>> def add_ints(a, b):
    ...     return a + b
    
    >>> add_ints(3, 5)
    8
    
  • デレコートした後のコードと実行結果

    >>> @document_it
    ... def add_ints(a, b):
    ...     return a + b
    ...
    >>> add_ints(3,5)
    Runting function: add_ints
    Positional arguments: (3, 5)
    Keyword arguments: {}
    Result: 8
    8
    

アノテーションで、document_it関数を指定することでデレコートできます。

いきなりアノテーションを使った例を示しましたが、使わない例も示します。

  • アノテーションを使わずに書いた例

    >>> def add_ints(a, b):
    ...     return a + b
    ...
    >>> cooler_add_ints = document_it(add_ints)
    >>> cooler_add_ints(3,5)
    Runting function: add_ints
    Positional arguments: (3, 5)
    Keyword arguments: {}
    Result: 8
    8
    

    つまりアノテーションは、cooler_add_ints = document_it(add_ints)の代わりです。

以上です。

勉強に使用している本

非常に分かりやすくておすすめです。

プログラムは経験あるけどPythonは初心者って方に、絶対おすすめの1冊です。

comments powered by Disqus