[英]Decorators in Python
假设您有以下代码:
def addTags(functionHere):
def wrapper():
return "NumberTag" + functionHere() + "NumberTagOver"
return wrapper
@addTags
def numbers(firstValue, secondValue):
return firstValue + secondValue
然后将数字(4,5)放到解释器中会吐出一条痕迹,说包装器没有参数。 好的,然后将Numbers()放到解释器中会吐出数字要两个参数! 困惑。
包装函数将替换包装的函数,并且需要匹配它所接受的参数数量。 包装的函数接受两个参数(firstValue, secondValue)
,但是包装器完全不接受。
您也可以将这两个添加到装饰包装器中:
def addTags(functionHere):
def wrapper(firstValue, secondValue):
return "NumberTag" + functionHere(firstValue, secondValue) + "NumberTagOver"
return wrapper
但这会将您的装饰器与该特定功能联系在一起。
您可以使用以下技巧:
def addTags(functionHere):
def wrapper(*args):
return "NumberTag" + functionHere(*args) + "NumberTagOver"
return wrapper
*args
位置参数充当一个包罗万象的东西,该函数的所有位置参数现在都传递给包装的函数。
关键字参数也有一个等效项:
def addTags(functionHere):
def wrapper(*args, **kw):
return "NumberTag" + functionHere(*args, **kw) + "NumberTagOver"
return wrapper
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.