我知道如何将一个简单的函数作为参数传递给另一个函数 - 但是如何通过"嵌套"功能?我试图做这样的事情:
def do(func):
print (func(6))
def a(x):
return x*2
def b(x):
return x*3
do(a(b))
答案 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
的好结果。即使我不确定这是否严格意味着“嵌套”函数。