Python有常用的map、reduce等函数,但是没有foreach,不过自己写一个也不难:
定义
# 需要Python3
def foreach(function, iterator):
for item in iterator:
function(item)
示例
输出所有迭代器中的元素:
>>> foreach(lambda value: print(value), range(5))
0
1
2
3
4
输出迭代器中的所有偶数:
>>> def echo_all_even(value):
... if value % 2 == 0:
... print(value)
...
>>> foreach(echo_all_even, range(5))
0
2
4
注意上面的示例我们定义了一个echo_all_even的临时函数,因为Python只支持在lambda中写单个表达式。 :(
for、map和foreach的区别:
foreach的作用是在不改变迭代器中的值的前提下(单纯依靠函数的副作用),将函数应用到迭代器中的各个元素上,主要是用作输出和调试作用,它一般不返回值。
foreach是for之上的一个抽象,for可以只迭代迭代器中的一部分值,而且可能修改迭代器中的值,而foreach迭代迭代器中的所有值,foreach也不修改迭代器中的值。
map和foreach类似,都是将一个函数应用到迭代器的所有值中,但map返回一个新的列表作为结果,而foreach不返回值。