我有一个对象obj
和一些函数
def func1(obj):
#...
def func2(obj):
#...
def func3(obj):
#...
每个都会更改obj
属性的值。
我希望我的输入类似于
obj = MyObject()
obj.attr=22
这应该传递给一个名为closure()
的函数,用于计算上述函数的所有可能应用,例如func1(func2(obj))
,func3(func1(func1(obj)))
等,直到某个停止条件(例如不超过20个函数组合)。
输出应该是所有可能的输出列表以及通往那里的所有路径。 因此,如果说假设obj.attr=22
,104
和93
是一种可能的最终输出,并且有两种方法可以到达104
,而到达93
则有一种方法。 那么
print closure(obj)
应该是这样的。[22, 64, 21, 104] #first path to 104 through , func1(obj),func1(func1(obj)), func1(func1(func3(obj)))
[22, 73, 104] #second path to 104 through , func3(obj),func3(func2(obj)),
[22, 11, 93] #the only path to arrive at 94
我该如何实现这个功能?如评论中建议的那样,最好使用树来实现,但是虽然我尝试了两天,几乎没有任何进展(我是 Python/编程新手)!
我的示例非常简单,我们可以直接使用 func(22)
而不是 func(obj)
,但我需要处理的示例更加复杂,我一定需要使用对象,所以这只是一个最小的工作示例。
由于每个函数应用都将包含一个测试,以判断它是否可以应用于当前状态(属性)的 obj
,因此该树可能不是完全的 n 叉树。在某些情况下,测试将失败,使得 obj
的属性未改变。