• 初识装饰器


    装饰器:不想修改函数的调用方式,但还是想在原来的函数前后添加功能。遵循开放封闭原则。(闭包)

    上图,运行过程详解。

     

     修饰器固定格式:

    1 def wrapper(f):#装饰器函数------wrapper()
    2     def inner(*args,**kwargs):
    3         ret = f(*args,**kwargs)#被装饰的函数-------f()
    4         return ret
    5     return inner

     语法糖:

    @装饰器函数

    1 @wrapper        #qqxing = wrapper(qqxing)
    2 def qqxing():
    3     print(123)

    #多个装饰器修饰一个函数

     1 #两个装饰器装饰一个函数,下附运行过程图
     2 def wrapper1(func):
     3     def inner1():
     4         print('wrapper1 ,before func')
     5         ret = func()
     6         print('wrapper1 ,after func')
     7         return ret
     8     return inner1
     9 
    10 def wrapper2(func):
    11     def inner2():
    12         print('wrapper2 ,before func')
    13         ret = func()
    14         print('wrapper2 ,after func')
    15         return ret
    16     return inner2
    17 
    18 
    19 @wrapper2
    20 @wrapper1
    21 def f():
    22     print('in f')
    23     return '哈哈哈'
    个装饰器

     1 #多个装饰器装饰一个函数
     2 def wrapper1(func):
     3     def inner1():
     4         print('wrapper1 ,before func')
     5         ret = func()
     6         print('wrapper1 ,after func')
     7         return ret
     8     return inner1
     9 
    10 def wrapper2(func):
    11     def inner2():
    12         print('wrapper2 ,before func')
    13         ret = func()
    14         print('wrapper2 ,after func')
    15         return ret
    16     return inner2
    17 
    18 def wrapper3(func):
    19     def inner3():
    20         print('wrapper3 ,before func')
    21         ret = func()
    22         print('wrapper3 ,after func')
    23         return ret
    24     return inner3
    25 
    26 @wrapper3
    27 @wrapper2
    28 @wrapper1
    29 def f():
    30     print('in f')
    31     return '哈哈哈'
    32 
    33 print(f())

    英文版:https://dzone.com/articles/understanding-python%20

  • 相关阅读:
    js正则小记
    github相关
    js设置 获取 删除cookie
    js传递数据一些方式
    js call()方法
    DOM节点相关操作(兼容)
    git 常用命令总结
    js中的this指向
    angular 中 directive中的多个指令
    指令中 controller && controllerAs
  • 原文地址:https://www.cnblogs.com/qinghuani/p/8134991.html
Copyright © 2020-2023  润新知