[Python-Dev] RE: code blocks using 'for' loops and generators (original) (raw)
Samuele Pedroni pedronis at strakt.com
Wed Mar 16 03:24:28 CET 2005
- Previous message: [Python-Dev] RE: code blocks using 'for' loops and generators
- Next message: [Python-Dev] thunks (was: code blocks using 'for' loops and generators)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Jim Jewett wrote:
It may be time to PEP (or re-PEP), if only to clarify what people are actually asking for.
Brian Sabbey's example from message http://mail.python.org/pipermail/python-dev/2005-March/052202.html seems reasonably clear, but I don't see how it relates in any way to "for" loops or generators, except as one (but not the only) use case. def add(thunk1, thunk2, other): print thunk1(1,2) + thunk2(3,4) + other with x,y from add(100): value x*y also a,b: # yikes?? value a*b # this is thunk2 To make my own understanding explicit: (1) Calls for "Ruby blocks" or "thunks" are basically calls for placeholders in a function. These placeholders will be filled with code from someplace else, but will execute in the function's own local namespace. (2) A function as a parameter isn't good enough, because the passed-in function can't see bindings in the surrounding larger function. (It still sees the lexical scope it which it was defined.) (3) A function as a parameter isn't good enough, because the passed-in function can't modify bindings in the surrounding larger function. (4) A thunk could be used today be creating a string (rather than a pre-compiled function) and substituting in the thunk's string (rather than the code to which it would compile) before execution, though this would be ugly. (5) A thunk might be do-able with exec or eval if a function's locals were still a dictionary.
notice that while closures with the current semantics of def cannot rebind, the internal mechanism for closures is perfectly capable of supporting rebinding. So thunks could be function objects.
(6) This has nothing whatsoever to do with for loops or generators, except as a common use case. In particular, thunks may be used to lock/unlock or unwind-protect some resource. Generators are not the only place this is needed, but they have made the "what do you mean, del might never get called?" problem even worse, and Ruby often solves these with a Ruby Block.
(7) A leave or exit special method really turns into another name for del. It might still be useful if it came with semantics of "I explicitly don't care what order cycles are broken; call me as soon as my object is garbage and who cares if it gets resurrected." There have been recipes (from Tim?) for emulating this by using a proxy to the resource, so that no del cycles can form. -jJ
Python-Dev mailing list Python-Dev at python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/pedronis%40strakt.com
- Previous message: [Python-Dev] RE: code blocks using 'for' loops and generators
- Next message: [Python-Dev] thunks (was: code blocks using 'for' loops and generators)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]