用decorator实现重复函数的Pythonic方法
注意模式和重复性? 假设我有一个列表用decorator实现重复函数的Pythonic方法,python,Python,注意模式和重复性? 假设我有一个列表['foo'、'bar'、'lorem'、'ipsum'、'abc'、'xyz'],如何以较少重复的方式实现与上述代码片段相同的效果 我从数据库中获得这个列表,我需要在这个列表中添加/删除更多项目的灵活性,并实现相应的效果 注意:我在几个框架/体系结构约束下运行,所以是的,“如果你不得不这样做,那就是糟糕的体系结构”,但这正是我需要做的。我不知道这是否可能。我不知道你的mydecorator或logic中有什么,但我的方法可以转移到它上。这是一种更“pytho
['foo'、'bar'、'lorem'、'ipsum'、'abc'、'xyz']
,如何以较少重复的方式实现与上述代码片段相同的效果
我从数据库中获得这个列表,我需要在这个列表中添加/删除更多项目的灵活性,并实现相应的效果
注意:我在几个框架/体系结构约束下运行,所以是的,“如果你不得不这样做,那就是糟糕的体系结构”,但这正是我需要做的。我不知道这是否可能。我不知道你的
mydecorator
或logic
中有什么,但我的方法可以转移到它上。这是一种更“pythonic”的方式来做你想做的事情:
@mydecorator('foo')
def foo():
logic('foo')
return True
@mydecorator('bar')
def bar():
logic('bar')
return True
@mydecorator('lorem')
def lorem():
logic('lorem')
return True
@mydecorator('ipsum')
def ipsum():
logic('ipsum')
return True
@mydecorator('abc')
def abc():
logic('abc')
return True
@mydecorator('xyz')
def xyz():
logic('xyz')
return True
一种方法是使用嵌套的def来创建闭包,以排除公共代码。然后,使用map()将函数应用于各种固定参数:
from functools import wraps
def mydecorator(func):
@wraps(func)
def decorated(*args, **kwargs):
print("In mydecorator: called by: "+func.__name__)
return func(func.__name__, *args, **kwargs)
return decorated
@mydecorator
def foo(name):
logic(name)
return True
@mydecorator
def bar(name):
logic(name)
return True
@mydecorator
def lorem(name):
logic(name)
return True
@mydecorator
def ipsum(name):
logic(name)
return True
def logic(name):
print("In logic: called by: "+name)
def make_decorated(s):
def inner():
logic(s)
return True
return mydecorator(s)(inner)
foo, bar, lorem, ipsum = map(make_decorated, ['foo', 'bar', 'lorem', 'ipsum'])