高阶函数定义
(1)把一个函数名当做实参传给另外一个函数,在不修改被装饰的函数源代码的情况下
为其添加功能
(2)返回值中包含函数名,不修改函数的调用方式
code 情况1
import time
def bar():
time.sleep(3)
print('in the bar')
def t1(func):
#print(func)
start_time = time.time()
print("内存地址(门牌号)",func)
func()
stop_time = time.time()
print("the func tun time is %s" %(stop_time-start_time))
#打印内存地址
t1(bar)
打印
内存地址(门牌号) <function bar at 0x000000000213C268>
in the bar
the func tun time is 3.0
code 情况2
import time
def bar():
time.sleep(3)
print('in the bar')
def t2(func):
print(func)
return func
#加上括号是把返回值传进去了 ,就不符合高阶函数的定义了
#print(t2(bar()))
print(t2(bar))
#t2(bar())
t3 = t2(bar)
print(t3)
t3() # run bar
#高阶函数 不修改函数的调用方式, 添加功能, 类似于隐士转换 ,实现了装饰器")
bar = t2(bar)
bar()
打印
<function bar at 0x000000000213C268>
<function bar at 0x000000000213C268>
<function bar at 0x000000000213C268>
<function bar at 0x000000000213C268>
in the bar
<function bar at 0x000000000213C268>
in the bar