Heim  >  Artikel  >  Backend-Entwicklung  >  Python behält Metadatenmethoden für dekorierte Funktionen bei

Python behält Metadatenmethoden für dekorierte Funktionen bei

小云云
小云云Original
2018-03-29 13:42:031462Durchsuche

In diesem Artikel wird hauptsächlich detailliert beschrieben, wie Python Metadaten für dekorierte Funktionen speichert. Ich hoffe, er kann Ihnen helfen.

Fall:

Das Funktionsobjekt speichert einige Funktionsmetadaten, wie zum Beispiel:

f.__name__ Funktionsname

f. __doc__ Funktionsdokument

f.__moudle__ Modulname, zu dem die Funktion gehört Attributwörterbuch

                                                                                                                                                                                                             siehe sind die Metadaten der Dekoratorfunktion

Anforderungen:

So implementieren Sie in der Dekoratorfunktion, dass die Metadaten der dekorierten Funktion erhalten bleiben

?

Es wird durch Wraps und update_wrapper-Methoden in Functools implementiert, die jeweils separat implementiert werden können


#!/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)

Das obige ist der detaillierte Inhalt vonPython behält Metadatenmethoden für dekorierte Funktionen bei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn