CSC/ECE 517 Spring 2014/ch1 1w1l m: Difference between revisions
		
		
		
		Jump to navigation
		Jump to search
		
 (Added basic definition of a closure)  | 
				 (Somewhat better closure example)  | 
				||
| Line 4: | Line 4: | ||
=== What is a closure? ===  | === What is a closure? ===  | ||
Very simply, a closure is a function that can use   | 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.  | ||
<code>  | <code>  | ||
  #!/usr/bin/env python  | |||
 # Define a function that makes use of closures  | |||
 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")  | |||
 # In case you're not convinced  | |||
 del closure_builder  | |||
  # Call the closures you built  | |||
  default_closure()  # Amazingly, prints "Default"  | |||
  custom_closure()  # Amazingly, prints "Custom"  | |||
</code>  | </code>  | ||
Revision as of 07:11, 23 February 2014
Design Patterns Involving Closures
Background
What is a closure?
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.
#!/usr/bin/env python
# Define a function that makes use of closures
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")
# In case you're not convinced
del closure_builder
# Call the closures you built
default_closure()  # Amazingly, prints "Default"
custom_closure()  # Amazingly, prints "Custom"
Examples
Narration
Links to Important Terms
References
<references />