我正在尝试在 python 中编写一个带有 4 个参数的函数
def sequence(operation, start, n, term):
其中 operation 是一个函数,start 是序列的开始编号,n 是序列的最后一个编号,term 是操作序列中各项的函数。
例如
>>> sequence(add, 2, 10, square)
将返回 2、3、4、...、10 的平方和
鉴于:
def square(x):
return x * x
我正在尝试在 python 中编写一个带有 4 个参数的函数
def sequence(operation, start, n, term):
其中 operation 是一个函数,start 是序列的开始编号,n 是序列的最后一个编号,term 是操作序列中各项的函数。
例如
>>> sequence(add, 2, 10, square)
将返回 2、3、4、...、10 的平方和
鉴于:
def square(x):
return x * x
reduce(lambda a,b: a+b, map(square, range(2,11)))
def sequence(operation, start, n, term):
return reduce(operation, map(term, range(start, n+1)))
Python 中的 range 函数是半开的,即。range(start, stop) 返回从 start 到 stop-1 的整数列表。因此,例如:
>>> range(2,10)
[2,3,4,5,6,7,8,9]
因此,要解决您的问题,您需要 range(start, n+1)。
要将函数“term”应用于此范围内的每个整数,您将使用内置函数映射,例如:
>>> map(square,range(2,11))
[4, 9, 16, 25, 36, 49, 64, 81, 100]
函数的最后一部分需要内置函数 reduce,它的参数是一个函数、一个可迭代对象和一个可选的初始值(在本例中不需要)。
reduce 将给定函数应用于可迭代的前两个元素;然后它将函数应用于第一次计算的结果和可迭代的第三个元素,依此类推。
因此,例如:
>>> from operator import add
>>> reduce(add, [4, 9, 16, 25])
... 相当于:
>>> add( add( add(4, 9), 16), 25)
... 和:
>>> reduce(add, [4, 9, 16, 25, 36, 49, 64, 81, 100])
... 相当于:
>>> add( add( add( add( add( add( add( add(4, 9), 16), 25), 36), 49), 64), 81), 100)
您可以使用Python内置函数 range
和.reduce
map
from operator import add,mul
def square(x): return x * x
def sequence(oper,m,n,func):
if oper not in (add,mul):
return None
return reduce(lambda a,b: oper(a,func(b)),
xrange(m,n+1),
0 if oper==add else 1)
print sequence(add, 3,4, square)
print sequence(mul,2,3,square)
print sequence('qq',10,110,square)
结果
25
36
None