如何在Python中传递函数乘以常数作为参数

时间:2018-07-18 23:39:07

标签: python functional-programming arguments

如何传递乘以常数的函数作为参数?这是为了我的代码的模块化。如果我愿意

def foo(fcn, **kwargs):
    return fcn(2, **kwargs["param1"])

def fcn1(x, **kwargs):
    return x ** kwargs["power"]

foo(4 * fcn1)

这将产生错误TypeError: unsupported operand type(s) for *: 'float' and 'function'

我不希望此常量包含在foo中,因为它实际上并不是foo功能的一部分。 Lmabda表达式是一种方法,但看起来不太好,例如foo(lambda x: 4 * fcn1)

2 个答案:

答案 0 :(得分:2)

使用lambda内联定义匿名函数:

foo(lambda x: 4 * fcn1(x))

您可以将其隐藏在辅助函数的后面:

def times_n(n, f):
    return lambda x: n * f(x)

foo(times_n(4, fcn1))

如果您不喜欢lambda,则可以使用所有命名函数:

def times_n(n, f):
    def fn(x):
        return n * f(x)
    return fn

每次调用fn(x)时都会创建一个新的times_n(),绑定到n的不同值上。

答案 1 :(得分:0)

您总是可以做

def foo(fcn, const=1):
    return const*fcn(2)
foo(fcn1, 4)

换句话说,只需使用可选参数即可。

相关问题