python為被裝飾的函數保留元資料方法

小云云
發布: 2018-03-29 13:42:03
原創
1456 人瀏覽過

本文主要為大家詳細介紹了python如何為被裝飾的函數保留元數據,希望能幫助大家。

案例:

       在函數物件中保存某些函數的元資料,例如:

            #              f.__doc__             與函數文件

    #              f.__dict__             與屬性字典

                 …

       使用裝飾器後,使用裝飾器存取上述屬性時,我們看到的是裝飾器函數的元資料

      

需求:

       

需求:

              實作在裝飾器函數中,且保留被裝飾函數的元資料

如何實現?

       透過functools中的wraps, update_wrapper方法實現,每個都可以單獨實作

#!/usr/bin/python3
 
import time
from functools import (wraps, update_wrapper, WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES)
 
 
def count_time(func):
  """
  给目标函数加上计算运行时间统计
  """
  # 这个装上器和update_wrapper一样,默认参数WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES
  @wraps(func)
  def wrapper(*args, **kwargs):
    start_time = time.time()
     
    # 定义result接收函数返回值,并且在装饰函数最后返回回去
    resutl = func(*args, **kwargs)
    print('运行时间:', time.time()-start_time)
    return resutl
   
  # 其中默认参数 WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES
  # update_wrapper(wrapper, func)
  return wrapper
 
 
@count_time
def add(num=100):
  """
  计算 0~num 累加值,默认num=100
  """
  time.sleep(1)
  return sum([x for x in range(num+1)])
 
if __name__ == '__main__':
  print('函数名:', add.__name__)
  print('属性字典:', add.__dict__)
  print('函数默认参数:', add.__defaults__)
  print('函数所在模块:', add.__module__)
  print('函数文档:', add.__doc__)
   
  # 打印两个默认参数
  print(WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES)
  result = add()
  print(result)
登入後複製


##rrreee

############################################################################## ##########

以上是python為被裝飾的函數保留元資料方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板