您的位置:首页 > 编程语言 > Python开发

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

2017-07-10 12:20 579 查看
本文和大家分享的主要是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

  @decoratordef 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

  测试

  @log2def f11(x, y):

  return x**y

  result = f11(2,3)

  print("result:" + str(result))

  切换到不同的实现中,他们的效果是相同的。

来源:Linux公社
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: