On 26 Apr 2007 20:05:45 +0200, Neil Cerutti <[EMAIL PROTECTED]> wrote: >On 2007-04-26, Steven Howe <[EMAIL PROTECTED]> wrote: >> [EMAIL PROTECTED] wrote: >>>> Well, why do some things in the library have to be functions, >>>> and other things have to be class methods? >> >> Perhaps because some things are more naturally function like? >> For 'instance' (pardon the pun), functions shouldn't retain >> data. They perform an operation, return data and quit. While >> retaining data is a feature of an class/instance. > >Functions do retain data. Classes and instances are just a >convenient notation. ;) > > [snip] > >Python's scoping rules make certain kinds of functional idioms >hard to use, though. I'm not sure how to get the following to >work in Python using functions: > >>>> def account(s): >... b = s >... def add(a): >... b += a >... def balance(): >... return b >... return add, balance >... >>>> add, balance = account(100) >>>> balance() >100 >>>> add(5) >Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "<stdin>", line 4, in add >UnboundLocalError: local variable 'b' referenced before assignment > >Anyhow, it doesn't work, but you can see how closely it resembles >a class definition.
Use the outfix closure operator, []: >>> def account(s): ... b = [s] ... def add(a): ... b[0] += a ... def balance(): ... return b[0] ... return add, balance ... >>> add, balance = account(100) >>> add(5) >>> balance() 105 >>> ;) Jean-Paul -- http://mail.python.org/mailman/listinfo/python-list