On Tue, Dec 1, 2009 at 8:42 AM, spir <denis.s...@free.fr> wrote:
> Great example, thank you.
>
> By the way, do you know the idiom:
>
> def makeInc(start):
>   def inc():
>      inc.n += 1
>      print inc.n
>   inc.n = start
>   # 'start' may change now
>   # ...
>   return inc
>
> inc= makeInc(start=3)
> inc()
>
> I find it much nicer than a pseudo default value, for it explicitely shows 
> that 'n' is, conceptually speaking, an attribute of the func (read: a closure 
> upvalue). Let's take advantage of the fact python funcs are real objects!

Well, if you need an attribute maintained between calls like that I
think a generator is much nicer to write:

def inc(start):
    while True:
        yield start
        start += 1

>>> i = inc(3)
>>> i.next()
3
>>> i.next()
4

There might be a use-case where function attributes fit better, can't
think of one right now though.

Hugo
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to