美文网首页
创建装饰器时保留函数元信息

创建装饰器时保留函数元信息

作者: noteby | 来源:发表于2019-02-19 14:47 被阅读0次

场景:你写了一个装饰器作用在某个函数上,但是这个函数的重要的元信息比如名字、文档字符串、注解和参数签名都丢失了

任何时候你定义装饰器的时候,都应该使用 functools 库中的 @wraps 装饰器来注解底层包装函数

  import time
  from functools import wraps
  def cal_time(func):
      '''
      Decorator that reports the execution time.
      '''
      @wraps(func)
      def wrapper(*args, **kwargs):
          start = time.time()
          result = func(*args, **kwargs)
          end = time.time()
          print(func.__name__, end-start)
          return result
      return wrapper
      
  @cal_time
  def func(n:int):
      for _ in range(n):
          pass
 
  func()

@wraps 有一个重要特征是它能让你通过属性 wrapped 直接访问被包装函数

  func.__wrapped__(3)

相关文章

  • 创建装饰器时保留函数元信息

    场景:你写了一个装饰器作用在某个函数上,但是这个函数的重要的元信息比如名字、文档字符串、注解和参数签名都丢失了 任...

  • 装饰器decorator

    @wrap保留元信息 类(class)的装饰器 继承装饰器 From:http://docs.pythontab....

  • python之装饰器

    装饰器 创建装饰器, 要求如下:创建add_log装饰器, 被装饰的函数打印日志信息;日志格式为: [字符串时间]...

  • Python装饰器

    装饰器简介 在Python中,装饰器属于“元编程”的类别,“元编程”的主要目的就是创建函数或者类,并且用它们来操纵...

  • Python装饰器

    2017.3.24更新:** 用@wraps(func)保存元信息**在创建装饰器的时候,一定要注意保存元信息。在...

  • TS 装饰器(2): 元数据

    TS 装饰器(2): 元数据 在装饰器函数中 ,我们可以拿到类、方法、访问符、属性、参数的基本信息,如它们的名称,...

  • python高手之路 笔记2装饰器专题 简明易懂

    python装饰器 创建装饰器 装饰器本质上就是一个函数,这个函数接收其他函数作为参数,并将其以一个新的修改后的函...

  • 随记,保留函数元信息

    @wraps 装饰器 我们平时写函数的时候,可能会在原函数的基础上增加额外的处理,比较常见的如:日志,计时等。 这...

  • 函数装饰器执行顺序

    当一个函数有多个装饰器时,会优先执行离函数最近的装饰器,由于装饰器返回的是函数的函数名引用,并非真正调用函数。

  • Python装饰器之多重装饰器

    多重装饰器 ​众所周知,使用装饰器装饰一个函数时,装饰器会将原函数当做一个参数,传进装饰器函数中,然后返回一个新的...

网友评论

      本文标题:创建装饰器时保留函数元信息

      本文链接:https://www.haomeiwen.com/subject/vqxfyqtx.html