Python: Closure in Python 2

By Xah Lee. Date: . Last updated: .

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