アキュムレータを作ろう

参考資料: 技術野郎の復讐---Revenge of the Nerds---


参考資料の付録にpythonでアキュムレータを生成する関数を書く例が載っているのですが、もうちょっと短く書けないものか、と考えてみました。

def foo(n):
  return lambda i, m=[n]: m.__setitem__(0, i+m[0]) or m[0]

a = foo(0)
print a(1)
# => 1

for i in range(5):
  print a(1)

# => 2
#    3
#    4
#    5
#    6

b = foo(11)
print b(12)
# => 23

デフォルト引数の値を意図的に書き換えることで値を保持しています。


よいこはまねしちゃだめですよ。