q6542125 发表于 2018-8-15 11:20:52

python 装饰器从放弃到玩转(高级)

  前面说了

[*]  计算原有函数的执行时间
[*]  利用装饰器如何给原有函数传参
[*]  利用装饰器如何接受原有函数的返回值
  最后我们说下如何给装饰器传值
  举个例子,有的函数我需要统计函数的运行时间,有的函数我需要统计他开始执行的时间,有人会说可以写多个装饰器,这个方法可以,但是这种方法会不会让我们的代码闲的过于臃肿
  假设test01需要计算函数的运行时间
  看代码
  def record_time(key):
  def out_warppper(func):
  def warpper(*agrs,**Kwagrs):
  start_time = time.time()
  a = func(*agrs,**Kwagrs)
  end_time = time.time()
  print "总共用时:" + str(int(end_time) - int(start_time))
  return a
  return warpper
  return out_warpper
  @record_time("test01")
  def test01(name=name):
  time.sleep(3)
  print "test"
  return name
  r = test01("tets01")
  print r
  解释

[*]  @record_time("test01")== test01 = record_time("test01") == out_warpper(test01) == warpper
[*]  test01("test01") == warpper("test01")
[*]  执行warpper函数
[*]  执行原test01函数
  可以看到不管是接受原函数的返回值,接受函数传参,装饰器接受参数,只要你真正理解了装饰器的调用原理及方式,都不难实现
页: [1]
查看完整版本: python 装饰器从放弃到玩转(高级)