def fun():
def fun1(num):
return num+1
return fun1
c = fun()
print(c(1))
在主函数中不能直接调用嵌套函数里的子函数如:fun1(num),需要先调用嵌套中的母函数如:fun(),然后把fun()函数中的子函数fun1()的地址传递给一个变量,然后才可以直接调用子函数fun1
一下是装饰器函数的标准模式,可以采用断点debug来一步步运行深入理解函数执行步骤
装饰器编码思路:将新的函数地址赋值给旧的函数,调用旧函数时实际运行的是新函数,新函数中又会运行旧函数,从而达到装饰的作用
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)