CSC/ECE 517 Spring 2014/ch1 1w1l m: Difference between revisions
Jump to navigation
Jump to search
(Added a design pattern example - decorators) |
(Removed some section headers that I don't think should be developed) |
||
Line 54: | Line 54: | ||
</code> | </code> | ||
== | == See Also == | ||
== References == | == References == | ||
<references /> | <references /> |
Revision as of 07:28, 23 February 2014
Design Patterns Involving Closures
Background
Explanation of Closures
Very simply, a closure is a function that can use a variable that was valid within the scope that the closure was defined, but need not be in-scope where the closure is called. A quick example is very illustrative.
def closure_builder(message="Default"):
def closure():
# Message is in-scope here
print message
return closure
# Build two functions
default_closure = closure_builder()
custom_closure = closure_builder("Custom")
del closure_builder
# Call the closures you built
default_closure() # Amazingly, prints "Default"
custom_closure() # Amazingly, prints "Custom"
Examples
Decorators
Decorators are an interesting and powerful language feature that can be implemented elegantly with closures.
#!/usr/bin/env python
def decorate(func):
def decorated_func():
print "About to call func"
func()
print "Back from calling func"
return decorated_func
@decorate
def func_to_decorate():
print "In func_to_decorate"
func_to_decorate()
[~517/wiki]$ chmod ug+x decorator.py
[~517/wiki]$ ./decorator.py
About to call func
In func_to_decorate
Back from calling func
See Also
References
<references />