Python小记——@(AOP:面向切面编程)

使用**@**符号引用已有的函数(A)后,可用于修饰其它函数(B

  1. 将被修饰函数(B)作为参数传递给@符号引用的函数(A)
  2. 将函数B替换成步骤1的返回值。
    使用@将被修饰的函数改造称为新函数。
In [1]: def funA(fn):
   ...:     print('A')
   ...:     fn()
   ...:     return 'abc'
   ...:

In [2]: @funA
   ...: def funB():
   ...:     print('B')
   ...:
A
B

In [3]: print(funB)
abc
  • 被修饰的函数总能被替换成@符号所引用的函数的返回值,因此被修饰的函数会变成什么,完全取决于@符号所引用的函数的返回值。
In [4]: def foo(fn):
   ...:     def bar(*args):
   ...:         print("===1===", args)
   ...:         n = args[0]
   ...:         print("===2===", n*(n-1))
   ...:         print(fn.__name__)
   ...:         fn(n*(n-1))
   ...:         print("*"*15)
   ...:         return fn(n*(n-1))
   ...:     return bar
   ...:

In [5]: @foo
   ...: def my_test(a):
   ...:     print("==my_test函数==", a)
   ...:
   
In [7]: my_test(10)
===1=== (10,)
===2=== 90
mt_test
==my_test函数== 90
***************
==my_test函数== 90

上面程序定义了一个装饰器函数foo,导致程序会事先执行foo(my_test),将my_test(10)替换为bar(10)。

发布了135 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_39541632/article/details/102873895