在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功能的一部分。