сохранение подписей украшенных функций
декораторы являются мощным инструментом для улучшения функциональности функций Python. Тем не менее, они могут иногда скрывать подпись исходной функции. Это может быть проблематичным для документации, отладки и автоматизированных инструментов.
:
рассмотрим общий декоратор, который преобразует все аргументы в целые числа:
def args_as_ints(f):
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
return g
kwargs = dict ((k, int (v)) для k, v in kwargs.items ()) возврат f (*args, ** kwargs) возврат g
, В то время как украшение работает, как и ожидалось, подпись декорированной функции заменяется "args, *kwargs", потерю информации о исходных аргументах.
] Этот декоратор сохраняет подпись исходной функции, передавая ее в качестве аргументов в обернутую функцию.
улучшенный декоратор:
import decorator
@decorator.decorator
def args_as_ints(f, *args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
@
def funny_function (x, y, z = 3):
"" "Вычисляет x*y 2*z" "" "
Вернуть x*y 2*z теперь, украшенная функция funny_funct Помощь на функции Funny_function в модуле __main__: funning_function (x, y, z = 3) Вычисляет x*y 2*z
Python 3.4:
@args_as_ints
def funny_function(x, y, z=3):
"""Computes x*y 2*z"""
return x*y 2*z
import functools def args_as_ints (func): @functools.wraps (func) def warper (*args, ** kwargs): args = [int (x) для x в args] kwargs = dict ((k, int (v)) для k, v in kwargs.items ()) вернуть фонд (*args, ** kwargs) return warper
>>> help(funny_function) Help on function funny_function in module __main__: funny_function(x, y, z=3) Computes x*y 2*z, используя эти методы, декораторы могут повысить функциональность функции, сохраняя их исходные подписи, обеспечивая ясность и согласованность в кодовой базе.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3