python - 创建和调用带有参数的函数堆栈
问题描述
我正在寻找一种方法来获得可以在以后执行的功能列表。我不确定将参数传递给这些函数的好方法。这个想法是让各种对象注册函数并让另一个对象决定是否执行这些函数以及执行这些函数的顺序。
我想出了这个
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)
推荐阅读
- loops - 尝试在 kotlin 中迭代链接的 hashedMap 但我需要一种方法来将当前元素和下一个元素与某个值进行比较
- woocommerce - 当 Woocommerce 中没有可用的运输方式时隐藏付款区域
- python - 如何使用 Midiutil 在一个时间点添加多个音符(或如何添加和弦)
- c++ - 二叉搜索树没有匹配的函数调用
- batch-file - 第一个脚本:选项选择和 IF 语句错误
- neural-network - 非线性神经网络回归 - 二次函数没有被正确估计
- php - Wordpress CSS 样式表不影响小部件输出
- swift - 如何将 Codable 与 Class 枚举一起使用
- c# - 您可以使用 Streamreader() 在一行中读取多个变量吗?
- python - 在python中融化不完整的数据而不丢弃所有的NaN