当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-06-24
使用**@**符号引用已有的函数(A)后,可用于修饰其它函数(B) 将被修饰函数(B)作为参数传递给@符号引用的函数(A) 将函数B替换成步骤1的返回值。 使用@将被修饰的函数改造称为

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

  • 将被修饰函数(B)作为参数传递给@符号引用的函数(A)
  • 将函数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)。


    上一篇:Python小记——面向对象程序设计
    下一篇:没有了
    网友评论