[Python-Dev] accumulator display syntax
Phillip J. Eby
pje at telecommunity.com
Thu Oct 16 10:50:44 EDT 2003
At 05:31 AM 10/16/03 -0700, Michael Chermside wrote:
>Alex Martelli writes:
> > I think we could extend indexing to mean something different when
> > the [ ] contain a 'for', just like we extended list display to mean
> > something different (list comprehension) when the [ ] contain a
> > 'for'. Syntax such as:
> > Top(10)[ humor(joke) for joke in jokes ]
> > does not suggest a list is _returned_, just like foo doesn't.
>I find the syntax a bit confusing.
>Are we subscripting here, or are we juxtaposing one expression
>("Top(10)"), with a list comprehension ("[humor(joke) for joke in jokes]")?
>Not totally unreadable, but it rubs me the wrong way. I read  used
>for subscripting as completely different from  used for list literals
>and list comprehensions. They just happen to share the same pair of
>symbols. To me, this confuses the two somewhat.
I have to second on the syntax confusion, but for a different reason. This:
Top(10)[ humor(joke) for joke in jokes ]
Looks to me like some kind of *slice* syntax. I would read this as being
roughly equivalent to:
temp = Top(10)
[temp[humor(joke)] for joke in jokes ]
Top(10) and all the other accumulators proposed are, IMO, nothing more than
transformations of a sequence or iterator. Transformations are what
functions are for, and function syntax clearly expresses that the function
is being applied to the sequence or iterator, and returning a
result. Peter's syntax is too magical, and Alex's implies subscripting
that doesn't really exist. Both are misleading to a casual reader of the code.
More information about the Python-Dev