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

在Python中,如何将乘以常数的函数作为参数传递,python,functional-programming,arguments,Python,Functional Programming,Arguments,如何将一个乘以常数的函数作为参数传递?这是为了代码的模块化。如果我这样做 def foo(fcn, **kwargs): return fcn(2, **kwargs["param1"]) def fcn1(x, **kwargs): return x ** kwargs["power"] foo(4 * fcn1) 这将为*:“float”和“function”提供错误TypeError:不支持的操作数类型 我不希望这个常量出现在foo中,因为它不是foo功能的一部分。

如何将一个乘以常数的函数作为参数传递?这是为了代码的模块化。如果我这样做

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

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

foo(4 * fcn1)
这将为*:“float”和“function”提供错误
TypeError:不支持的操作数类型


我不希望这个常量出现在foo中,因为它不是foo功能的一部分。Lmabda表达式是一种方式,但看起来并不美观,例如
foo(lambda x:4*fcn1)

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

foo(lambda x: 4 * fcn1(x))
您可以将其隐藏在助手函数后面:

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

foo(times_n(4, fcn1))
如果您不喜欢lambdas,可以使用所有命名函数:

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

每次调用
times\u n()
时,将创建一个新的
fn(x)
,绑定到
n

的不同值。使用lambda内联定义匿名函数:

foo(lambda x: 4 * fcn1(x))
您可以将其隐藏在助手函数后面:

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

foo(times_n(4, fcn1))
如果您不喜欢lambdas,可以使用所有命名函数:

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

每次调用
times\u n()
时,将创建一个新的
fn(x)
,绑定到不同的
n
值。您可以执行以下操作

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

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

您始终可以执行以下操作

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

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

def foo(fcn,const):return const*fcn(2)
?我不希望这个常量出现在foo中,因为它实际上不是foo功能的一部分。Lmabda表达式是一种方法,但看起来不太好。Python函数不表示数学函数。它们代表着做事的指示。对于Python函数,支持
*
运算符将更容易混淆而不是有用。您应该共享真正的代码
def foo(fcn,const):return const*fcn(2)
?我不希望这个常量出现在foo中,因为它实际上不是foo功能的一部分。Lmabda表达式是一种方法,但看起来不太好。Python函数不表示数学函数。它们代表着做事的指示。对于Python函数,支持
*
运算符将更容易混淆,而不是有用。您应该共享您的真实代码。我不希望此常量出现在foo中,因为它不是foo功能的一部分。我不希望此常量出现在foo中,因为它不是foo功能的一部分。