装饰器2
装饰器添加参数传递:import time
# 高阶函数深入
def bar1():
print('Begin to sleep')
time.sleep(2)
print('In the bar1')
return 0
def bar2():
print('Begin to sleep')
time.sleep(3)
print('In the bar2')
return 0
def test(func):# 定义装饰器
print(func)
# 上面打印的是函数的地址,即储存内容的‘门牌号’
func()# 运行函数的内容
return func# 返回参数函数,使参数函数的调用方式不变
bar1 = test(bar1)
bar1()#参数函数的调用方式不变
# 下面设计装饰器,计算test1、test2的运行时间
def timer(func):
def deco(*args, **kwarge):# *args, **kwarge:表示非固定参数,灵活变通
start_time = time.time()
func(*args, **kwarge)# 在函数的参数里面需要带相应的*、**
stop_time = time.time()
print('The func running time is %s' % (stop_time - start_time))
return 0
return deco
@timer#相当于test1=timer(test1)
def test1():
print('Begin to sleep')
time.sleep(2)
print('In the test1')
return 0
@timer
def test2(name, age, **kwarge):
print(name)
print(age)
print(kwarge)# 实际输出时不能带相应的*、**
return 0
print('Decorator2 begins to run!')
test1()#因为第40行有@timer,所以可以直接用
test2("Flagon", 33, Height='173cm', Gender='Male')
页:
[1]