parameterize (GitHub) is a Python implementation of Scheme SRFI 39, Parameter objects by Marc Feeley, drafted in 2002 and 2003, finalized in 2006:

This SRFI defines parameter objects, the procedure make-parameter to create parameter objects and the parameterize special form to dynamically bind parameter objects. In the dynamic environment, each parameter object is bound to a cell containing the value of the parameter. When a procedure is called the called procedure inherits the dynamic environment from the caller. The parameterize special form allows the binding of a parameter object to be changed for the dynamic extent of its body.

Frankly, I don’t understand everything in SRFI 39 since I can’t code in Scheme and know absolutely nothing about the language, but the explanation of parameterize might be clearer:

[…], parameter objects hold a single value. They are meant to be declared as global variables, so that the values they contain can be accessed anywhere. […] context manager, parameterize(), […] Any changes to the parameter that happen within this code block can’t escape it, and can’t affect other threads of execution.

[…] halfway between global variables and local variables. They’re access[i]ble from anywhere, and modifiable from anywhere, but modifications are always contained completely within their parameterize() block.

If still not, the following example code from README might:

import parameterize
import sys

# create our parameter and proxy object
stdoutp = parameterize.Parameter(sys.stdout)
sys.stdout = stdoutp.proxy()

print('before')
with open('output.txt', 'w') as f:
    with stdoutp.parameterize(f):
        print('inside')
print('after')

What this code does is, it redirects the sys.stdout to the file and it does not interrupt with other threads if any who are also print() out data, they use the real sys.stdout other than the redirected destination.

To create a parameter object, or use its APIs:

po = parameterize.Parameter(default, converter)

po.get()

po.set(v)
# equivalent to
po(v)

with po.parameterize(v) as ctx:
    pass

The created parameter object has set and get methods for manipulate the value that is contained by this object. A parameterize method is used to produce a context manager as seen in the example above. proxy method is used to track any changes made to the value.

parameterize is written by Aaron Griffith under the MIT License, currently version 0.1 (2014-04-22), for both Python 2 and 3.