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 is Closure?

Closure is a computer language feature. It is a function with persistent local variable.

In other words, a function that has local variables that retain its values when the function call is finished, but the variable is not accessible outside the function definition.

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

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 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 2

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

Python

Regex

Text Processing

Web

Misc