[Python-Dev] comprehension abbreviation
"Martin v. Löwis"
martin at v.loewis.de
Tue Mar 15 23:14:24 CET 2005
Eric Nieuwland wrote:
>> [ <test> for <exprlist> in <testlist> <list-iter-opt> ]
> Aren't these names a bit mixed up w.r.t. what's in that position?
It comes more-or-less straight out of Grammar/Grammar, so: no,
I don't think so.
> As far as I know
> <test> is not a test but a function as it produces any value not just
To quote more of Grammar/Grammar, it is
test: and_test ('or' and_test)* | lambdef
and_test: not_test ('and' not_test)*
not_test: 'not' not_test | comparison
comparison: expr (comp_op expr)*
comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
expr: xor_expr ('|' xor_expr)*
power: atom trailer* ['**' factor]
trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME
So a function call is a power is a factor is a term is an arith_expr
is a shift_expr is an and_expr is a xor_expr is an expr is a comparison
is a not_test is an and_test is a test.
> <exprlst> is a list of names, not arbitrary expressions
No, it's more than that. I can also be
a, (b, c, (d, e))
But as I said: there are further (semantical) constraints what
kind of expression you can have there.
More information about the Python-Dev