[Python-Dev] accumulator display syntax

Tim Peters tim_one at email.msn.com
Wed Oct 22 22:19:06 EDT 2003


[Greg Ewing]
> Lying awake thinking about this sort of thing last night,
> I found myself wondering if there should be a way of
> explicitly requesting that a name be evaluated at closure
> creation time, e.g.
>
>     pipe = source
>     for p in predicates:
>         pipe = e for e in pipe if ^p(e)
>
> where the ^ means that p is evaluated in the enclosing
> scope when the closure is created, and bound to a slot
> which behaves like a default-argument slot (but is
> separate from the default arguments).

As explained in the original email, the example is also a disaster if pipe's
binding isn't captured at creation-time too.

> This would allow the current delayed-evaluation semantics
> to be kept as the default, while eliminating any need
> for using the default-argument hack when you don't
> want delayed evaluation.

Well, I have yet to see an example where delayed evaluation is of any use in
a generator expression, except for a 100%-contrived example that simply
illustrated that the semantics can in fact differ (which I hope isn't
something anyone questioned to begin with <wink>).

Try writing a real example.  If it needs delayed evaluation in a plausible
way, great.  I'm still batting 0 at trying to find such a thing; I confess I
wasn't moved by the

    it = f(x) for x in whatever
    def f(x):
        blah

example (there being no apparent need to contort the order of the
assignments except, again, to illustrate that semantics have consequences).




More information about the Python-Dev mailing list