[Python-3000] Lexical Scoping and Javascript
Nick Coghlan
ncoghlan at gmail.com
Sun Jul 9 04:03:15 CEST 2006
Talin wrote:
> I'd like to encourage those who are interested to read the Javascript
> document carefully (in particular, all of the sections describing 'let',
> and the 'dictionary assignment' feature) and think about how this line
> of thinking might affect the discussion here.
>
> Who knows, perhaps there might be some cross-borrowing :)
Interesting, very interesting.
The 'let' statement/expression does seem like a very reasonable approach to
the early binding/late binding question, since the order of writing matches
the order of execution.
Try this for an adaptation to Python:
let NAME=EXPR in EXPR2 # Early binding expression
let NAME=EXPR in: # Early binding statement
SUITE
Instead of the single NAME=EXPR part, you could also use a sequence of
assignments (similar to keyword arguments).
The let statement would create a new local scope, similar to def. Unlike def,
the new local scope is executed immediately, rather than being kept around for
later execution.
Just like a nested function definition, assignment statements in the body of a
'let' statement would *not* be able to write to the outer scope in the absence
of some form of 'nonlocal' declaration.
The expression form would be essentially equivalent to:
(lamda NAME=EXPR: EXPR)()
And the statement form would be equivalent to:
def _hidden1(NAME=EXPR):
SUITE
_hidden1()
del _hidden1
To make the following use early binding instead of late binding:
def f():
funcs = []
for i in range(10):
funcs.append(lamba: i)
return funcs
>>> [x() for x in f()]
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
You could do either:
def f():
funcs = []
for i in range(10):
let i=i in funcs.append(lamba: i)
return funcs
Or:
def f():
funcs = []
for i in range(10):
let i=i in:
def inner():
return i
funcs.append(inner)
# 'inner' is NOT defined anymore!
return funcs
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-3000
mailing list