CSC/ECE 517 Spring 2014/ch1 1w1l m: Difference between revisions

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


== Narration ==
== See Also ==
 
== Links to Important Terms ==
 
== 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 />