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 3: Closure

This pages shows you what is closure, and how to simulate its effect using python 2.

What's Closure?

Closure is a computer language feature. It is a function with local state.

In other words, a function that has local variables that remains there when the function call is finished.

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

xx = 0

def myFun():
    global xx
    xx += 1
    return xx

myFun()
myFun()
myFun()
print xx    # prints 3

The global keyword tells Python that the variable you are using is in the global context. 6. Simple statements — Python v2.7.6 documentation #global

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

xx= [ 0 ]

def myFun():
    xx[0] = xx[0] + 1
    return xx[0]

myFun()
myFun()
myFun()

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

def myFun():
    myFun.xx += 1
    return myFun.xx

myFun.xx = 0

myFun()
myFun()
myFun()

print myFun.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