天天看點

Python中的foreach

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不傳回值。