Thứ Năm, 2 tháng 7, 2015

[Python] Decorators

Python decorators cung cấp một cách thức đơn giản để apply những modifications lên các callable object như function, class, methods.

Có thể hiểu đơn giản, môt decorator là function:

  • Nhận input là function.
  • Định nghĩa một function mới thực hiện một số hành động với input function.
  • Return lại function mới đó.




Xét một vài ví dụ đơn giản:

In [1]: def deco_exam(func):
   ...:     def double_func(name):
   ...:         func(name)
   ...:         func(name)
   ...:     return double_func
   ...:

In [2]: @deco_exam
   ...: def hello(name):
   ...:     print "hello", name
   ...:  

In [3]: hello('thanhnt')
hello thanhnt
hello thanhnt

Ví dụ trên sẽ function hello() sẽ được return 2 lần khi được apply decorator deco_exam được định nghĩa như trên.

Multiple decorators.

  • Thực hiện từ decorator gần nhất đến xa nhất.
  • Decorator trước cần return output (function) mà decorator sau có thể gọi và thực hiện được.


2 nhận xét:

  1. với người không biết thì

    "Có thể hiểu đơn giản, môt decorator là một higher-order function:" chẳng đơn giản tí nào.

    Thậm chí nó là 1 khái niệm không phổ biến trong Python.

    Trả lờiXóa