full closures

Andrae Muys amuys at shortech.com.au
Wed Feb 27 18:47:49 EST 2002


"Emile van Sebille" <emile at fenx.com> wrote in message news:<a5jbra$7ok00$1 at ID-11957.news.dfncis.de>...
> "Michael P. Soulier" <msoulier at nortelnetworks.com_.nospam> wrote in
> message news:slrna7q9m0.4pb.msoulier at pmerd071.ca.nortel.com...
> >     Hello.
> >
> >     While I know about bound methods in Python, I'm wondering if a
>  full
> > closure can be implemented. Can it?
> >
> >     Example: I want to pass an arbitrary code reference into a closure
>  and
> > have all of its variables preserved.
> >
> >     ie.
> >
> >     print "the current count is %d" % counter; counter += 1
> >
> >     Can I pass the above code into a closure, and then simply call it
> > repeatedly and see counter increment itself? If I pass in a function
>  with a
> > local variable, that local will be reset each time, and I don't want
>  to use a
> > global.
> >
> 
> I don't understand closures, but I might try something like:
> 
> class Counter:
>     def __init__(self):
>         self.count = 0
>     def __int__(self):
>         self.count += 1
>         return self.count
> 
> counter = Counter()
> print "the current count is %d" % counter
> 

That works, as does using a generator:

def Counter():
    counter = 0
    while 1:
        print "the current count is %d % counter
        counter += 1
        yield counter - 1   # might as well return it :)

counter = Counter()
counter.next()
 - the current counter is 0
 - 0
counter.next()
 - the current counter is 1
 - 1

Andrae



More information about the Python-list mailing list