Edg*_*ian 0 python decorator python-2.7 python-decorators
假设您有以下代码:
def addTags(functionHere):
def wrapper():
return "NumberTag" + functionHere() + "NumberTagOver"
return wrapper
@addTags
def numbers(firstValue, secondValue):
return firstValue + secondValue
Run Code Online (Sandbox Code Playgroud)
然后将数字(4,5)放入解释器中吐出一条迹线,表示包装器不带参数.好的,然后将数字()放入解释器中吐出数字需要两个参数!困惑.
您的包装函数替换了包装函数,并且需要匹配它所包含的参数数量.你的包装函数有两个参数(firstValue, secondValue),但你的包装器根本没有参数.
您也可以将这两个添加到装饰器包装器中:
def addTags(functionHere):
def wrapper(firstValue, secondValue):
return "NumberTag" + functionHere(firstValue, secondValue) + "NumberTagOver"
return wrapper
Run Code Online (Sandbox Code Playgroud)
但是这会将你的装饰者与特定的功能联系起来.
但是你可以使用一些技巧:
def addTags(functionHere):
def wrapper(*args):
return "NumberTag" + functionHere(*args) + "NumberTagOver"
return wrapper
Run Code Online (Sandbox Code Playgroud)
该*args位置参数作为一个包罗万象的,对该函数的所有位置参数,现在传递到包装的函数.
关键字参数也有一个等价物:
def addTags(functionHere):
def wrapper(*args, **kw):
return "NumberTag" + functionHere(*args, **kw) + "NumberTagOver"
return wrapper
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |