事例:総和を求める
1から5までの数の和/積が得られます。
>>> s = range(1,6); s [1, 2, 3, 4, 5] >>> reduce(lambda acc,e: acc+e, s, 0) 15 >>> reduce(lambda acc,e: acc*e, s, 1) 120
lambda 関数の第1引数 acc には、初期値として 0 が設定されます。第2引数 e は、リスト s の各要素を先頭から順に参照できます。すると、次のようにして計算が進みます。
acc | e | acc+e | |
---|---|---|---|
(1) | 0 | 1 | 0+1 |
(2) | 1 | 2 | 1+2 |
(3) | 3 | 3 | 3+3 |
(4) | 6 | 4 | 6+4 |
(5) | 10 | 5 | 10+5 |
1)変数 e の値は 1 になるので、式 acc+e は 0+1 となり、その値 1 が変数 acc に設定されます。
2)変数 e の値は 2 になるので、式 acc+e は 1+2 となり、その値 3 が変数 acc に設定されます。
3)変数 e の値は 3 になるので、式 acc+e は 3+3 となり、その値 6 が変数 acc に設定されます。
4)変数 e の値は 4 になるので、式 acc+e は 6+4 となり、その値 10 が変数 acc に設定されます。
5)変数 e の値は 5 になるので、式 acc+e は 10+5 となり、その値 15 が変数 acc に設定されます。
これは、式 (((((0)+1)+2)+3)+4)+5 を評価したのと同じ結果になります。こうして、総和 15 が得られます。