On Sat, 04 Feb 2012 02:27:56 +0200 Antti J Ylikoski <antti.yliko...@tkk.fi> wrote:
[...] > > # Make a Common LISP-like closure with Python. > # > # Antti J Ylikoski 02-03-2012. > > def f1(): > n = 0 > def f2(): > nonlocal n > n += 1 > return n > return f2 > [...] > > i. e. we can have several functions with private local states which > are kept between function calls, in other words we can have Common > LISP-like closures. > I'm not sure how naughty this is, but the same thing can be done without using nonlocal by storing the local state as an attribute of the enclosed function object: >>> def f(): ... def g(): ... g.count += 1 ... return g.count ... g.count = 0 ... return g ... >>> h = f() >>> j = f() >>> h() 1 >>> h() 2 >>> h() 3 >>> j() 1 >>> j() 2 >>> j() 3 This way, you can also write to the attribute: >>> j.count = 0 >>> j() 1 John -- http://mail.python.org/mailman/listinfo/python-list