문제 :
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
:
def g (*args, ** kwargs) :
Args = [args에서 x의 int (x)]
kwargs = dict (kwargs.items ()의 k, v에 대한 (k, int (v)))
반환 f (*args, ** kwargs)
return 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)
만족 :
서명을 수동으로 docstring에 수동으로 복사합니다.
각 특정 서명에 대한 새 장식자를 작성하십시오. 우아한 솔루션 :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)
데코레이터를 가져옵니다
@decorator.decorator
def args_as_ints (f, *args, ** kwargs) :
Args = [args에서 x의 int (x)]
kwargs = dict (kwargs.items ()의 k, v에 대한 (k, int (v)))
return f (*args, ** kwargs)
>>> help(funny_function) Help on function funny_function in module __main__: funny_function(x, y, z=3) Computes x*y 2*z
이제 장식 된 기능 funny_function은 원래 서명을 유지합니다 : >>> help (funny_function). 모듈의 기능에 대한 도움말 __main__ : funny_function (x, y, z = 3) x*y 2*z
python 3.4 :
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)
whraps는 유사한 솔루션을 제공합니다. def args_as_ints (func) : @functools.wraps (func) Def Wrapper (*args, ** kwargs) : Args = [args에서 x의 int (x)] kwargs = dict (kwargs.items ()의 k, v에 대한 (k, int (v))) 반환 핵 (*args, ** kwargs) Return Wrapper
이러한 기술을 사용하여 데코레이터는 원래 서명을 유지하면서 기능 기능을 향상시켜 코드베이스의 명확성과 일관성을 보장 할 수 있습니다.부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3