**或pow()不支持的操作数类型:'function'和'int'

时间:2017-12-16 12:04:45

标签: python python-3.x

这是我的代码,请您告诉我打印时导致错误的原因是什么?函数compose应该用来计算函数组合。

def compose(lst):
    return acc(g, h, lst)
print(compose([lambda x:x**2,lambda y:2*y])(5))
def acc(f, v, lst):
    if len(lst)==0:
        return v
    if len(lst)==1:
        return f(v,lst[0])
    return f(lst[0], acc(f,v,lst[1:]))
def h(f):
     return f
def g(f1,f2):
     return f1(f2)

2 个答案:

答案 0 :(得分:2)

您需要创建一个实际使用参数调用g的函数f2

def g(f1, f2):
    def func(*args, **kwargs):
        return f1(f2(*args, **kwargs))
    return func

print(compose([lambda x: x**2, lambda y: 2*y])(5))

输出:

100

这相当于:

>>> (lambda x: x**2)((lambda y: 2*y)(5))
100

答案 1 :(得分:1)

在最后一行f1(f2),给f1的参数是f2(lambda),而不是int 5。

您需要执行lst[0](lst[1](x))

之类的操作