How can I do this (from Perl) in Python? (closures)

James Stroud jstroud at mbi.ucla.edu
Thu Dec 4 03:59:00 EST 2008


excord80 at gmail.com wrote:
> from_ten = make_counter(10)
> from_three = make_counter(3)
> 
> print from_ten()       # 10
> print from_ten()       # 11
> print from_three()     # 3
> print from_ten()       # 12
> print from_three()     # 4
> ####################
> 
> The error message is: "UnboundLocalError: local variable 'start'
> referenced before assignment". The same thing happens if I omit start
> and just use start_num directly.
> 
> How can I do it in Python?

Since no one has suggested it:

class make_counter(object):
   def __init__(self, i):
     self.i = i
   def __call__(self):
     i = self.i
     self.i += 1
     return i

James


-- 
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com



More information about the Python-list mailing list