装饰器

2019-09-18 11:00:34 浏览数 (1)

代码语言:javascript复制
def fun():
    def fun1(num):
        return num 1
    return fun1

c = fun()
print(c(1))
在主函数中不能直接调用嵌套函数里的子函数如:fun1(num),需要先调用嵌套中的母函数如:fun(),然后把fun()函数中的子函数fun1()的地址传递给一个变量,然后才可以直接调用子函数fun1
一下是装饰器函数的标准模式,可以采用断点debug来一步步运行深入理解函数执行步骤
装饰器编码思路:将新的函数地址赋值给旧的函数,调用旧函数时实际运行的是新函数,新函数中又会运行旧函数,从而达到装饰的作用
代码语言:javascript复制
import time
def timer(func):
    def dec(*args,**kwargs):
        time_start = time.time()
        func(*args,**kwargs)
        time_stop = time.time()
        print(time_stop-time_start)
    return dec
@timer#test1 = timer(test1)此时test1已经盖头换面成dec函数,dec函数内存地址给了test1
def test1():
    time.sleep(3)
    print("test1")
@timer
def test2(name,age):
    print("test2",name,age)
test1()#实际运行的是dec函数
test2("zita",24)

0 人点赞