高阶函数
A.把一个函数名当作实参传递给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
B.返回值中包含函数名(不修改函数的调用方式)
示例1(A)
import time
def bar():
time.sleep(0.1)
print('in the bar')
def test(func): #不改变bar的源代码的情况下添加功能
start_time = time.time()
func()
stop_time = time.time()
print('运行时间为:{}'.format(stop_time-start_time))
print('func:{}'.format(func)) #func==bar
test(bar) #但是修改的调用方式
print('bar:{}'.format(bar))
运行结果:
in the bar
运行时间为:0.100982666015625
func:<function bar at 0x03639C00>
bar:<function bar at 0x03639C00>
示例2(B)
import time
def bar():
time.sleep(0.1)
print('in the bar')
def test(func):
print(func) #添加了新功能
return func
bar = test(bar)
bar() #没有改变调用方式
运行结果:
<function bar at 0x011A9C00>
in the bar
PS:所有的铺垫是为了学习装饰器