创建和调用带有参数的函数堆栈



我正在寻找一种方法来列出可以在以后执行的函数列表。我不确定将参数传递到这些函数中的好方法。这个想法是让各种对象注册函数,并让另一个对象决定是否执行这些函数以及以何种顺序执行这些函数。

我想出了这个

class Place():
def __init__(self):
self.things = []
def register_add_thing(self, thing):
def add_thing(place, thing):
place.things.append(thing)
return (add_thing, [self, thing])
def register_add_ting(self, ting):
def add_thing():
nonlocal self
nonlocal ting
self.things.append(ting)
return add_thing

p = Place()
functions = []
functions.append(p.register_add_ting('toast'))
for f in functions:
f()
print(p.things)
functions = []
functions.append(p.register_add_thing('bread'))
for f in functions:
f[0](*f[1])
print(p.things)

有没有更好的方法来处理参数?

如果您的参数在注册时是固定的,那么您有几个选择。我假设您不喜欢返回注册函数及其参数的设计。后来被称为f[0](*f[1])

def register_add_thing_func(self, thing):
def wrapper(place, thing):
def inner():
place.things.append(thing)
return inner
return wrapper(self, thing)
def register_add_thing_lambda(self, thing):
return lambda : self.things.append(thing)
...
functions.append(p.register_add_thing_func('bread'))
functions.append(p.register_add_thing_lambda('bread'))
for f in functions:
f()
print(p.things)

最新更新