• Python3-装饰器


    一、介绍
        装饰器本质上是一个函数,可以让其他函数在不改变源代码的前提下增加额外的功能
     
    二、示例:
        ---->万能装饰器
     1 import time
     2  
     3 def decorate(func):
     4     def inner_func(*args,**kwargs):
     5         print("---校验开始---")
     6         time.sleep(2)
     7         func(*args,**kwargs)
     8         print("---校验结束---")
     9     return inner_func
    10  
    11 @decorate
    12 def f1():
    13     print("------------->sakura")
    14  
    15 f1()
    16  
    17 @decorate
    18 def f2(num):
    19     for i in range(num):
    20         print("第{}次打印".format(i))
    21  
    22 f2(3)
    23  
    24 student = ["Sakura","Seele","Annie"]
    25 @decorate
    26 def f3(l,clazz = "1903"):
    27     print("{}班级学生名单有:".format(clazz))
    28     for i in l:
    29     print(i)
    30  
    31 f3(student,clazz="1905")
    结果:
    ---校验开始---
    ------------->sakura
    ---校验结束---
    ---校验开始---
    第0次打印
    第1次打印
    第2次打印
    ---校验结束---
    ---校验开始---
    1905班级学生名单有:
    Sakura
    Seele
    Annie
    ---校验结束---
     
    三、多重装饰器
        如果装饰器是多重的,谁距离函数最近,就优先使用哪个装饰器
        示例:
     1 import time
     2  
     3 def decorate(func):
     4     print("----Start 01----")
     5     def wrapper(*args,**kwargs):
     6         print("----装饰器01 校验开始!----")
     7         time.sleep(1)
     8         func(*args,**kwargs)
     9         print("----装饰器01 校验结束!----")
    10     print("----End 01----")
    11     return wrapper
    12  
    13 def decorate1(func):
    14     print("----Start 02----")
    15     def wrapper(*args,**kwargs):
    16         print("----装饰器02 校验开始!----")
    17         time.sleep(1)
    18         func(*args,**kwargs)
    19         print("----装饰器02 校验结束!----")
    20     print("----End 02----")
    21     return wrapper
    22  
    23 @decorate1
    24 @decorate
    25 def func():
    26     for i in range(5):
    27         time.sleep(1)
    28         print("第{}次打印!".format(i))
    29  
    30 func()
    结果:
    ----Start 01----
    ----End 01----
    ----Start 02----
    ----End 02----
    ----装饰器02  校验开始!----
    ----装饰器01  校验开始!----
    第0次打印!
    第1次打印!
    第2次打印!
    第3次打印!
    第4次打印!
    ----装饰器01  校验结束!----
    ----装饰器02  校验结束!----
     
    四、装饰器带参数
            带参数的装饰器是三层的
            最外面的函数负责接收装饰器参数
            里面的内容还是原装饰器的内容
        
        示例:
     1 import time
     2 def decorate(a): # 1.接收装饰器的参数
     3     def inner_decorate(func): # 2.接收函数
     4         def wrapper(*args,**kwargs): #3.接收函数中的参数
     5             time.sleep(1)
     6             print("-----校验开始!----")
     7             func(*args,**kwargs)
     8             print("进行了{}次运算".format(a))
     9             print("----校验结束!----")
    10         return wrapper
    11     return inner_decorate
    12  
    13  
    14 @decorate(a=10)
    15 def func(num1):
    16     for i in range(0,num1):
    17         print("第{}次打印!".format(i))
    18  
    19 func(5)
    结果:
    -----校验开始!----
    第0次打印!
    第1次打印!
    第2次打印!
    第3次打印!
    第4次打印!
    进行了10次运算
    ----校验结束!----
     
  • 相关阅读:
    Weekly blog for week 1908
    Weekly blog for week 1907
    Weekly blog for week 1905&1906
    Weekly blog for week 1904
    Write Week 3 Blog beforehand
    Add Week 2 Blog
    First week of a new year
    Andriod-Log
    bat
    学习方法
  • 原文地址:https://www.cnblogs.com/DemonKnifeGirl/p/12997239.html
Copyright © 2020-2023  润新知