我想在Python中编写一个函数,它返回n个函数(f1(x) * f2(x) * f3(x) * ... * fn(x))
的乘法。
我在思考像:
def mult_func(*args):
return lambda x: args(0)(x) * args(1)(x) ...
但我并不确切知道如何在args中循环n
函数。
谢谢。
答案 0 :(得分:6)
非常简单 - 只需使用reduce:
from operator import mul
def mult_func(*args):
return lambda x: reduce(mul, (n(x) for n in args), 1)
这只是一个循环函数的生成器表达式,并通过乘法减少。
答案 1 :(得分:5)
args
只是一个元组,但很难以lambda
表达式的方式迭代它们(除非你使用reduce
)。改为定义嵌套函数。
def mult_func(*args):
def _(x):
rv = 1
for func in args:
rv *= func(x)
return rv
return _
答案 2 :(得分:2)
def mult_func(x, *args):
total = 1
for func in args:
total *= func(x)
return total
非常简单地返回所有args
的产品,并输入x
。
快速举例:
def square(n):
return n**2
>>> print mult_func(2, square, square)
16
>>> print mult_func(2, square, square, square)
64
答案 3 :(得分:0)
这是那个晚上的时间,所以这是一个相互递归的解决方案:
def multiply_funcs(funcs):
def inner(x):
if not funcs:
return 1
return funcs[0](x) * multiply_funcs(funcs[1:])(x)
return inner