Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数作为参数的传递函数_Python_Python 3.x - Fatal编程技术网

Python 函数作为参数的传递函数

Python 函数作为参数的传递函数,python,python-3.x,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)) 这里的主要问题是do(a(b))将通过a中的函数b,并导致类型错误 这里的主要问题是,无论传递给函数do的是什么,都必须是可调用的,否则print(func(6))语句将由于适当的原因而失败(缺少\u call

我知道如何将一个简单函数作为参数传递给另一个函数,但如何传递“嵌套”函数呢?我正在尝试这样做:

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

def a(x):
    return x*2

def b(x):
    return x*3

do(a(b))

这里的主要问题是
do(a(b))
将通过
a
中的函数
b
,并导致
类型错误

这里的主要问题是,无论传递给函数
do
的是什么,都必须是可调用的,否则
print(func(6))
语句将由于适当的原因而失败(缺少
\u call\u
方法),因此我认为这种结构方式不适合您尝试执行的操作

作为一个解决方案,您可以执行“门把手建议”(基本上在可调用中传递),或者考虑函数“<代码> >代码< >代码> >函数>代码> > do>代码> >。p> 因此,如果将函数

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
结果。尽管我不确定这是否严格意义上是“嵌套”函数。

这里的主要问题是
do(a(b))
将通过
a
中的函数
b
,并导致
类型错误

这里的主要问题是,无论传递给函数
do
的是什么,都必须是可调用的,否则
print(func(6))
语句将由于适当的原因而失败(缺少
\u call\u
方法),因此我认为这种结构方式不适合您尝试执行的操作

作为一个解决方案,您可以执行“门把手建议”(基本上在可调用中传递),或者考虑函数“<代码> >代码< >代码> >函数>代码> > do>代码> >。p> 因此,如果将函数

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
结果。尽管我不确定这是否严格意义上就是您所说的“嵌套”函数。

使用函数组合方法:

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)

使用功能组合方法:

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)
do(lambda x:a(b(x)))
您正在寻找。
do(lambda x:a(b(x)))
您正在寻找。