[Python-Dev] thunks

Samuele Pedroni pedronis@bluewin.ch
Mon, 3 Feb 2003 18:20:42 +0100


From: "Guido van Rossum" <guido@python.org>
> I still don't have time to read this thread :-(, but I had a new idea
> that I'd like to fly here.
>
> If we want to support thunks that blend into the scope of their
> environment as well as thunks that introduce a new local scope, here's
> one possible way to do it:
>
> Thunk blending in:
>
>   [<variable> =] <expression>:
>     <block>
>
> Thunk introducing a new local scope:
>
>   [<variable> =] <expression> lambda:
>      <block>
>
> (Never mind the ugly things I've said about lambda in the past. :-)
>
> I'm confident that the parser can distinguish these, and I'm confident
> that the scope blending can be implemented using nested-scope cells.
>
> Adding formal parameters to the second case would go like this:
>
>   [<variable> =] <expression> lambda <arguments>:
>      <block>
>
> One concern I have in both cases: I think there are use cases for
> wanting more than one block.  Glyph's example wants to define various
> callbacks for a remote call, and this would need multiple blocks.  I
> think the syntax for this would have to use some kind of keyword-based
> continuation, e.g.
>
>   [<variable> =] <expression> lambda:
>     <block>
>   and <expression> lambda:
>     <block>
>   ...
>
> Disclaimer: this is a half-baked idea.

Is lambda for generalizing 'class'??  It is worth to rember that 'class' has
different scoping rules than def!

>>> def c():
...  x = 1
...  class B:
...    x=2
...    def f(self):
...     return x
...  return B()
...
>>> b=c()
>>> b.x
2
>>> b.f() # not 2
1