我有一个函数process
,它接受函数列表和可迭代函数。我想将该列表中的每个函数一个接一个地应用于可迭代函数。我写的这个很好,但是。。。
def process(list_of_funcs, string):
for func in list_of_funcs:
string = ''.join(list(map(func, string)))
return string
ans = process([lambda c: c.upper(), lambda c: c + '0'], "abcd")
print(ans) # A0B0C0D0
我想跳过for循环(用函数式编程的方式(。在python中有这样的方法吗?
您可以使用参数为的functools.reduce
- 作为
function
:将当前函数应用于上一个结果 - 作为
sequence
:函数列表 - 作为
initial
值:初始字符串
def process(list_of_funcs, string):
return reduce(lambda res, f: ''.join(map(f, res)), list_of_funcs, string)
注:不需要中间体list
,join
取iterator
这里有一个有3个函数的例子,它给出了与循环解决方案的初始输出相同的输出
fcts = [lambda c: c.upper(), lambda c: c + '0', lambda c: c * 2]
ans = process(fcts, "abcd")
print(ans) # AA00BB00CC00DD00