[Python-ideas] Where-statement (Proposal for function expressions)

Paul Moore p.f.moore at gmail.com
Wed Jul 15 12:25:04 CEST 2009


2009/7/15 Carl Johnson <cmjohnson.mailinglist at gmail.com>:
> It seems like for that case, we definitely want the "where" to apply
> every time the generator expression loops though, but… Is that
> feasible?

To make the form follow the intent, the where block would need to be
inside the [...] - which clearly violates the "no indented block
structure within expressions" design rule.

My initial instinct was that the original form violated that rule, too
- but if you interpret the where block as a statement postfix, you're
(almost) OK. The (almost) bit is because the where block has to be
limited to simple (single-line) statements.

But with those restrictions, the semantics become

stmt where:
   a
   b
   c

=>

a
b
c
stmt

with the proviso that variables defined in a,b,c are only available
within a, b, c and stmt.

But of course that immediately prompts the question:

x = 1
y = x where:
    x = 2
print x

What does that print?

x = []
y = 1 where:
    x.append(1)
print x

What about that?

x = []
y = x
z = 1 where:
  x.append(1)
print x, y, x is y

And what about that???

And before someone points out Greg's proposal to limit the construct
to "binding statements", please define (clearly) what is a "binding
statement". And then explain how that helps if I replace x.append(1)
with _ = x.append(1) in the above...

I sort of like the idea, but it needs much better defined syntax and
semantics if it's going to work.

Paul.



More information about the Python-ideas mailing list