Python中的装饰模式如何实现?

本文和大家分享的主要是python 装饰模式的实现方式相关内容,一起来看看吧,希望对大家 学习python有所帮助。
   功能目标
  编写一个可以打印被装饰函数名称、执行时间、内存地址得装饰器
   前置依赖包
  import time
  import functools
  from decorator import decorator
   基于普通的函数嵌套
  def  log1(fn):
   def  _wrapper(*args, **kwargs):
  start = time.clock()
  result = fn(*args, **kwargs)
  print("%s is invoked with time consumed: %s seconds at address %s" % (fn.__name__, str(time.time() - start), id(fn)))
   return result
   return _wrapper
   基于@decorator
  @decorator def  log(f, *args, **kwargs):
  start = time.time()
  result = f(*args, **kwargs)
  print("%s is invoked with time consumed: %s at address %s" % (f.__name__, str(time.time() - start), id(f)))
   return result
   使用@functools
   def  log2(f):    @functools.wraps(f)
   def  wrapper(*args, **kwargs):
  start = time.clock()
  result = f(*args, **kwargs)
  print("%s is invoked with time consumed: %s seconds at address %s" % (f.__name__, str(time.time() - start), id(f)))
   return result
   return wrapper
   测试
  @log2 def  f11(x, y):
   return x**y
  result = f11(2,3)
  print("result:" + str(result))
  切换到不同的实现中,他们的效果是相同的。
来源:Linux 公社
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值