如何传递乘以常数的函数作为参数?这是为了我的代码的模块化。如果我愿意
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)
答案 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)
换句话说,只需使用可选参数即可。