Python中的装饰器

时间:2013-03-15 17:53:49

标签: python python-2.7 decorator python-decorators

假设您有以下代码:

def addTags(functionHere):
    def wrapper():
        return "NumberTag" + functionHere() + "NumberTagOver"
    return wrapper

@addTags
def numbers(firstValue, secondValue):
    return firstValue + secondValue

然后将数字(4,5)放入解释器中吐出一条迹线,说包装器不带参数。好的,然后将数字()放入解释器中吐出数字需要两个参数!困惑。

1 个答案:

答案 0 :(得分:6)

你的包装函数替换了包装函数,需要匹配它所需的参数个数。你的包装函数有两个参数(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
相关问题