传递函数函数作为参数

时间:2015-11-15 15:31:25

标签: python python-3.x

我知道如何将一个简单的函数作为参数传递给另一个函数 - 但是如何通过"嵌套"功能?我试图做这样的事情:

def do(func):
    print (func(6))

def a(x):
    return x*2

def b(x):
    return x*3

do(a(b))

2 个答案:

答案 0 :(得分:3)

使用功能组合方法:

def compose(f, g):
    return lambda x: f(g(x))

def do(func):
    print (func(6))

def a(x):
    return x*2

def b(x):
    return x*3

combinedAB = compose(a,b)
do(combinedAB)

答案 1 :(得分:1)

这里的主要问题是do(a(b))会传递b中的a函数并导致TypeError

这里的主要问题是,无论你传递给函数do 必须是一个可调用的,否则print(func(6))语句会因为适当的原因而失败(缺少一个__call__方法)因此我认为这种结构的方式不符合您的要求。

作为一种解决方案,您可以执行@Doorknob建议的内容(实质上是传入一个可调用的)或者考虑从函数b返回函数a,然后将在函数do中使用它。

因此,如果你改变函数a

def do(func):
    print (func(6))

def a(x):
    x = x * 2
    def b(y):
        return x * (y * 3)
    return b

do(a(2))

你会得到72的好结果。即使我不确定这是否严格意味着“嵌套”函数。