Python: Closure in Python 2
Python 2 does not support Closure . (as of Python 2.7.3)
Python 3 does support closure. 〔see Python: Closure〕
The following are several techniques to let function maintain a state.
Function with State, Using Global Variable
The simplest is to use global variable.
# -*- coding: utf-8 -*- # python 2 xx = 0 def ff(): global xx xx += 1 return xx ff() ff() ff() print xx # prints 3
The global
keyword tells Python that the variable you are using is in the global context.
The problem with this approach is that global variable can be accessed by others. You can use a specially named global variable such as tempvar_name_74292
to lessen the problem.
Function with State, Using Global Array
Another way is to use a global list.
# -*- coding: utf-8 -*- # python 2 xx= [ 0 ] def ff(): xx[0] = xx[0] + 1 return xx[0] ff() ff() ff() print xx[0] # prints 3
Function with State, Using Object Oriented Programing
The most clean way is to use a object.
# -*- coding: utf-8 -*- # python 2 def ff(): ff.xx += 1 return ff.xx ff.xx = 0 ff() ff() ff() print ff.xx # prints 3
Thanks to people on comp.lang.python {Patrick Useldinger, Andrew Clover, Andrew Koenig, …}. http://groups.google.com/group/comp.lang.python/browse_frm/thread/1eeb2cf4f343a04f