Ruby
def foo(n) lambda { |i| n += i } end f = foo(1) puts f.call(1) puts f.call(2) puts f.call(3) puts f.call(4) puts f.call(5) #=> 2 #=> 4 #=> 7 #=> 11 #=> 16 #=> nil
Python
Python の lambda は式しか使えない。代入は文なので下記はエラーになる。
def foo(n): lambda i: n += i # SyntaxError: invalid syntax
だからPythonで書くと多少冗長になる。
def foo(n): s = [n] def bar(i): s[0] += i return s[0] return bar f = foo(1) print f.__call__(1) print f.__call__(2) print f.__call__(3) print f.__call__(4) print f.__call__(5) #=> 2 #=> 4 #=> 7 #=> 11 #=> 16