• 装饰器--函数


    装饰器,主要是要了解装饰的是执行过程。

     1 # 高级装饰器
     2 def fun1():
     3     print("fun1")
     4 
     5 def fun2():
     6     print("fun2")
     7 
     8 def Filter(f1,f2):      # 1.2 f1=fun1   f2=fun2
     9     def outer(main_fun):    # 3、outer(login)     main_fun = login  返回inner
    10         def inner(*args,**kwargs):
    11             f1()
    12             main_fun(*args,**kwargs)
    13             f2()
    14         return inner
    15     return outer
    16 
    17 # 1.1 、先执行Filter(fun1,fun2),返回outer,变成@outer
    18 @Filter(fun1,fun2)      # @outer
    19 def login(what):            # def login():   # 2、login = outer(login)  # 4、 login = inner
    20     print("login%s"%what)
    21 
    22 login()     # 5、执行inner

    执行结果:

      fun1
      login可以了
      fun2

    第一步:执行第18行,执行Fiter(fun1,fun2)这个函数,将fun1、fun2的地址分别传递给f1和f2,返回outer函数的地址给第18行的Filter(fun1,fun2),这样@Filter(filter(fun1,fun2)就变成了@outer。

    第二步:根据装饰器的语法,第18行和第19行可以理解为 login = outer(login),这样就会执行outer(login),把login地址传递给outer(main_fun)中的main_fun,并执行outer(main_fun),然后返回inner地址,所有login = inner

    第三步:执行第22行login(),这里其实就是执行inner(),执行inter()函数里面那就是执行f1()也就是fun1()、f2()也就是fun2()、main_fun()也就是最原始的login()

  • 相关阅读:
    一、zuul如何路由到上游服务器
    一、hystrix如何集成在openfeign中使用
    一、ribbon如何集成在openfeign中使用
    二、openfeign生成并调用客户端动态代理对象
    一、openfeign的自动配置
    BootStrap【一、概述】
    JavaSpring【七、AspectJ】
    JavaSpring【六、AOP的API】
    JavaSpring【五、AOP基础】
    目录整理
  • 原文地址:https://www.cnblogs.com/owasp/p/5442509.html
Copyright © 2020-2023  润新知