setting variables in outer functions
Duncan Booth
duncan.booth at invalid.invalid
Tue Oct 30 12:29:37 EDT 2007
Neil Cerutti <horpner at yahoo.com> wrote:
> It's allows a standard programming idiom which provides a
> primitive form of object oriented programming using closures to
> represent state.
>
> def account(opening_balance):
> balance = opening_balance
> def get_balance():
> nonlocal balance
> return balance
> def post_transaction(x):
> nonlocal balance
> balance += x
> return balance, post_transaction
>
> fred_balance, fred_post = account(1500)
> joe_balance, joe_post = account(12)
> fred_post(20)
> joe_post(-10)
> fred_balance()
TypeError: 'int' object is not callable
> 1520
> joe_balance()
TypeError: 'int' object is not callable
> 2
>
> Python classes will of course nearly always win, though the idiom
> looks like it might be faster (I don't have Python 3000 to try it
> out).
Python classes might be less error prone. I expect they could also be
faster: accessing non-local variables (whether fetching or setting) has
always been suprisingly slow in Python 2.x.
More information about the Python-list
mailing list