鱼C论坛

 找回密码
 立即注册
查看: 3257|回复: 0

[技术交流] 装饰器2

[复制链接]
发表于 2020-9-21 09:32:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
装饰器添加参数传递:
  1. import time
  2. # 高阶函数深入


  3. def bar1():
  4.     print('Begin to sleep')
  5.     time.sleep(2)
  6.     print('In the bar1')
  7.     return 0


  8. def bar2():
  9.     print('Begin to sleep')
  10.     time.sleep(3)
  11.     print('In the bar2')
  12.     return 0


  13. def test(func):  # 定义装饰器
  14.     print(func)
  15. # 上面打印的是函数的地址,即储存内容的‘门牌号’
  16.     func()  # 运行函数的内容
  17.     return func  # 返回参数函数,使参数函数的调用方式不变


  18. bar1 = test(bar1)
  19. bar1()  #参数函数的调用方式不变
  20. # 下面设计装饰器,计算test1、test2的运行时间
  21. def timer(func):
  22.     def deco(*args, **kwarge):  # *args, **kwarge:表示非固定参数,灵活变通
  23.         start_time = time.time()
  24.         func(*args, **kwarge)  # 在函数的参数里面需要带相应的*、**
  25.         stop_time = time.time()
  26.         print('The func running time is %s' % (stop_time - start_time))
  27.         return 0
  28.     return deco


  29. @timer  #相当于test1=timer(test1)
  30. def test1():
  31.     print('Begin to sleep')
  32.     time.sleep(2)
  33.     print('In the test1')
  34.     return 0

  35. @timer
  36. def test2(name, age, **kwarge):
  37.     print(name)
  38.     print(age)
  39.     print(kwarge)  # 实际输出时不能带相应的*、**
  40.     return 0


  41. print('Decorator2 begins to run!')
  42. test1()  #因为第40行有@timer,所以可以直接用
  43. test2("Flagon", 33, Height='173cm', Gender='Male')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-27 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表