gzj137070928 发表于 2020-9-21 09:32:13

装饰器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]
查看完整版本: 装饰器2