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