Something is rotten in Denmark...
Thomas Rachel
nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de
Fri Jun 3 04:30:06 EDT 2011
Am 03.06.2011 01:43 schrieb Gregory Ewing:
> It's not the lambda that's different from other languages,
> it's the for-loop. In languages that encourage a functional
> style of programming, the moral equivalent of a for-loop is
> usually some construct that results in a new binding of the
> control variable each time round, so the problem doesn't
> arise very often.
>
> If anything should be changed here, it's the for-loop, not
> lambda.
In my opinion, it is rather the closure thing which confused me at some
time, and that's exactly what is the subject of the thread.
On one hand, a closure can be quite handy because I have access to an
"outer" vaiable even it changes.
But on the other hand, I might want to have exactly the value the
variable had when defining the function. So there should be a way to
exactly do so:
funcs=[]
for i in range(100):
def f(): return i
funcs.append(f)
for f in funcs: f()
Here, i should not be transported as "look what value i will get", but
"look what value i had when defining the function".
So there should be a way to replace the closure of a function with a
snapshot of it at a certain time. If there was an internal function with
access to the readonly attribute func_closure and with the capability of
changing or creating a cell object and thus hbeing capable of doing so,
it could be used a a decorator for a function to be "closure-snapshotted".
So in
funcs=[]
for i in range(100):
@closure_snapshot
def f(): return i
funcs.append(f)
each f's closure content cells would just be changed not to point to the
given variables, but to a cell referenced nowhere else and initialized
with the reference pointed to by the original cells at the given time.
Thomas
More information about the Python-list
mailing list