Python中如何实现@(AOP:面向切面编程)的用法?

2026-05-24 14:532阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计385个文字,预计阅读时间需要2分钟。

Python中如何实现@(AOP:面向切面编程)的用法?

使用`@`符号引用已有的函数(A)后,可用于修饰其他函数(B)。将修饰后的函数(B)作为参数传递给`@`引用的函数(A),并将函数B替换为步进1的返回值。使用`@`修饰的函数将被重新定义为返回值。

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

Python中如何实现@(AOP:面向切面编程)的用法?

  • 将被修饰函数(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)。


    本文共计385个文字,预计阅读时间需要2分钟。

    Python中如何实现@(AOP:面向切面编程)的用法?

    使用`@`符号引用已有的函数(A)后,可用于修饰其他函数(B)。将修饰后的函数(B)作为参数传递给`@`引用的函数(A),并将函数B替换为步进1的返回值。使用`@`修饰的函数将被重新定义为返回值。

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

    Python中如何实现@(AOP:面向切面编程)的用法?

  • 将被修饰函数(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)。