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

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

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

If you have a question, put $5 at patreon and message me.

Python by Example

  1. Python Basics
  2. Print Version String
  3. Builtin Help
  4. Quote String
  5. String Operations
  6. String Methods
  7. Format String
  8. True, False
  9. if then else
  10. for, while, Loops
  11. List Basics
  12. Loop Thru List
  13. Map Function to List
  14. List Comprehension
  15. List Methods
  16. Dictionary
  17. Loop Thru Dict
  18. Dict Methods
  19. Function
  20. Class
  21. List Modules
  22. Write a Module
  23. Unicode 🐍

Regex

  1. Regex Basics
  2. Regex Reference

Text Processing

  1. Read/Write File
  2. Traverse Directory
  3. Manipulate Path
  4. Process Unicode
  5. Convert File Encoding
  6. Find Replace in dir
  7. Find Replace by Regex
  8. Count Word Frequency

Web

  1. Send Email
  2. GET Web Page
  3. Web Crawler
  4. HTTP POST
  5. Check Page Load Size
  6. Thumbnail Generation

Misc

  1. JSON
  2. Find Script Path
  3. Get Env Var
  4. System Call
  5. Decompress Gzip
  6. Complex Numbers

Advanced

  1. Sort
  2. Copy Nested List
  3. Tuple vs List
  4. Sets, Union, Intersection
  5. Closure in Python 2
  6. Decorator
  7. Append String in Loop
  8. Timing f timeit
  9. Keyword Arg Default Value Unstable