繁体   English   中英

Python:如何将带有两个参数的函数作为参数传递

[英]Python: How to pass function with two parameters as an argument

我有个问题:

我需要在 python 中实现一个函数,它打印一个参数的 skalar 倍数 - 参数是一个函数本身,它具有以下签名:

def innerF(a,b):
    return x

skalar 乘数是函数内的常数 - 例如

return 55 * x

现在是我似乎没有得到的部分:调用 Sytanx 必须是:

print( outerF(innerF)(a,b))

所以总结一下

def innerF(a,b):
    return a + b

def outerF( #What goes here? ):
    return 55* #How two call the innerF?

print(outerF(innerF)(a,b))

到目前为止我所知道的:

  • 我可以将innerF和a,b作为单独的参数传递给outerF,例如

    def outerF(innerF,a,b): 返回 53*innerF(a,b)

我没有得到的:

我完全不知道带有innerF(outerF)(a,b)的outerF 调用的签名。 我也找不到参考。

非常感谢您提前!

outerF需要返回一个被(a, b)调用的函数

def innerF(a, b):
    return a + b


def outerF(func):
    # define a function to return
    def f(*args, **kwargs):
        # this just calls the given func & scales it
        return 55 * func(*args, **kwargs)

    return f


print(outerF(innerF)(1, 2))

结果:

165  # 55 * (1+2)

所以你需要的是嵌套函数。

outerF(innerF)(a, b)

意味着outerF(innerF)返回一个新函数,然后将ab作为参数。

为此,您需要一个返回函数的函数。

def inner(a, b):
    return a + b

def outer(func):
    def wrapper(a, b):
        55 * func(a, b)
    return wrapper

outer(inner)(2, 3) # 275

您还可以将外部函数用作装饰器。

@outer
def inner(a, b):
    return a + b
    
inner(2, 3) # 275

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM