zoukankan      html  css  js  c++  java
  • 初识装饰器

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

    上图,运行过程详解。

     

     修饰器固定格式:

    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

  • 相关阅读:
    垂直同步
    C++ RAII
    C++ RAII
    LCD刷新率和垂直同步的设置
    ping结果中TTL是什么意思
    垂直同步
    stage.frameRate改变帧频
    ping结果中TTL是什么意思
    stage.frameRate改变帧频
    ping 命令的原理,揭开单向“Ping”通的奥秘
  • 原文地址:https://www.cnblogs.com/qinghuani/p/8134991.html
Copyright © 2011-2022 走看看