如何 运行 嵌套部分

how to run nested partials

我有一组要调用的嵌套部分:

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()

我认为 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'