我正在尝试使用装饰器对函数进行参数化。经过大量的打击和试验,我终于能够让它按预期运行。但我仍然不满意,好像它正在工作,这似乎不是正确的方法。
请帮我改进这段代码。
这是我的代码:
def WarmWelcome(fn):
def wrapped(DataProvider):
for name in DataProvider():
print fn(name) + ":)"
return wrapped
def DataProvider():
names=["abc","xyz","def"]
for name in names:
yield name
@WarmWelcome
def hello(name):
return "hello " +name
hello(DataProvider)
这是更新后的代码:
def WarmWelcome(DataProvider):
def real_decorator(fn):
def wrapped():
for name in DataProvider():
print fn(name) + ":)"
return wrapped
return real_decorator
def DataProvider():
names=["abc","xyz","def"]
for name in names:
yield name
@WarmWelcome(DataProvider)
def hello(name):
return "hello " +name
hello()
请您参考如下方法:
也可以向 WarmWelcome 装饰器提供数据集权限:
def WarmWelcome(*data_sets):
def _decorator(func):
def _func():
for ds in data_sets:
func(*ds)
return _func
return _decorator
@WarmWelcome(
("abc", ),
("xyz", ),
("def", ),
)
def hello(name):
return "hello " +name
原文:PHPUnit-like dataProvider implementation for Python unittest
