我要调用一组嵌套的局部函数:
print(my_partial)
functools.partial(<function g at 0x000001A047370598>,
functools.partial(<function f at 0x000001A047370620>,
functools.partial(<function c at 0x000001A047370400>, 5)))
所以当我尝试运行我的局部零件时,我会得到内部的局部零件:
print(my_partial)
functools.partial(<function f at 0x000001A047370620>,
functools.partial(<function c at 0x000001A047370400>, 5))
(或类似的东西)。无论如何,因此要运行此命令以对5
(输入数据)进行最终转换,我必须这样做:
print(my_partial()()()())
25
是否有一个functools
函数可以将嵌套的部分传递给它,以便它可以为我全部运行?像这样:
print(functools.run_partials(my_partial))
25
是否存在类似的东西?我希望如此,我正在研究的解决方案是越野车:
def run_nested(x):
print(str(type(x())))
if 'functools.partial' in str(type(x())):
run_nested(x())
print('DONE!', x())
return x()
答案 0 :(得分:2)
我认为functools
中没有什么可以帮助的。您可以一直调用它,直到不再可用单个while
调用它为止。像这样:
from functools import partial
def f(fn):
return fn
def g(fn):
return fn
def c(n):
return n*n
my_f = partial(g, partial(f, partial(c, 5) ))
print(my_f())
# functools.partial(<function f at 0x10eb7cd08>, functools.partial(<function c at 0x10eb7c598>, 5))
res = my_f
while(callable(res)):
res = res()
print(res) # '25'