如何运行嵌套的局部

时间:2019-01-08 01:14:10

标签: python partial functools

我要调用一组嵌套的局部函数:

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

1 个答案:

答案 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'