question??? [Python-Dev] Property syntax

Samuele Pedroni pedronis@bluewin.ch
Fri, 31 Jan 2003 20:41:46 +0100


From: "Guido van Rossum" <guido@python.org>
> > > Not at all.  This is still wide open.  I happen to like generalized
> > > thunks because they remind me of Ruby blocks.  But I realize there are
> > > more ways to skin this cat.  Keep it coming!
> >
> > question, do you want thunks to be able to take arguments? is being
> > able to write something like this a target?
> >
> > iterate(list): (x):
> >   print x
>
> Since we already have a for loop, I'm not sure what the use case would
> be, but it might be nice, yes.  Feel free to call YAGNI on it until
> a better use case is found.  But I imagine it would be easy enough to
> add on later in the design -- thunks can have free variables anyway,
> so providing a way to bind some of those ahead of time (and designate
> them as bindable) should be easy.

Go for it, write a PEP. Seriously: if redundance is not an issue for you, then
is just a matter of taste (and I don't want to argue about that) and
readability/transparence of what some code do (maybe someone else will argue
about that).

Some final remarks from my part:
- With nested scope cells any kind of scoping can be achieved, so that's not a
problem up to speed-wise unbalance with normal inline suites.
- Non-local 'return' and 'break' can be achieved with special exceptions and
uniquely identifying thunk sites,
! BUT yield inside a thunk cannot be implemented in Jython
- I think that there should be a *distinguashable* syntax for introducing/using
thunks with inline-suite scoping vs. 'class'-like scoping. I'm very very very
uncomfortable with the idea of variable-geometry scoping, that means that I
would have to go read some hairy code defining 'foo' in order to know:

def f():
  x=3
  foo:
    x=2

whether the second x= is modifying the local x to f, or is just local to foo
suite.

- for completeness you may want to add a keyword to directly return something
from a thunk to its caller, instead of  non-locally return with 'return' from
thunk site:

def f(lst):
  iterate(lst): (x):
    if pred(x): return x # non-local return out of f

def change(lst):
   substitute(lst): (x):
     value 2*x # return value to thunk caller

L=[1,2,3]
change(L)

L is now [2,4,6]