preservando as assinaturas das funções decoradas
decoradores são uma ferramenta poderosa para aprimorar a funcionalidade das funções python. No entanto, às vezes eles podem obscurecer a assinatura da função original. Isso pode ser problemático para documentação, depuração e ferramentas automatizadas. def G (*args, ** kwargs): args = [int (x) para x em args] kwargs = dict ((k, int (v)) para k, v em kwargs.items ()) Retornar f (*args, ** kwargs) Retornar g
Enquanto a decoração funciona conforme o esperado, a assinatura da função decorada é substituída por " args, *kwargs", perdendo informações sobre os argumentos originais. Satisfactory:
copiando manualmente a assinatura no docstring.
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
importar decorador @decorator.Decorator def args_as_ints (f, *args, ** kwargs): args = [int (x) para x em args] kwargs = dict ((k, int (v)) para k, v em kwargs.items ()) Retornar f (*args, ** kwargs)
Este decorador preserva a assinatura da função original, passando -a como argumentos para a função embrulhada. def funny_function (x, y, z = 3): "" "Calcula x*y 2*z" "" Retornar x*y 2*zagora, a função decorada engraçada_function mantém sua assinatura original:
>> Ajuda (Funny_function) Ajuda na função Funny_function no módulo __main__: Funny_function (x, y, z = 3) Calcula x*y 2*z
usando essas técnicas, os decoradores podem aprimorar a funcionalidade da função enquanto preservam suas assinaturas originais, garantindo clareza e consistência na base de código.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3