Re: Conditional expressions - PEP 308

2007-01-31 Thread Colin J. Williams
Paddy wrote:
 On Jan 30, 9:51 pm, Colin J. Williams [EMAIL PROTECTED] wrote:
 It would be helpful if the rules of the game were spelled out more clearly.

 The conditional expression is defined as X if C else Y.
 We don't know the precedence of the if operator.  From the little test
 below, it seem to have a lower precedence than or.

 Thus, it is desirable for the user to put the conditional expression in
 parentheses.

 Colin W.

 # condExpr.py
 # PEP 308 defines a conditional expression as X if C else Y
 # but we don't know exactly what X is supposed to be.
 # It doesn't seem to be spelled out in the syntax.

 def main():
names= ['abc', 'def', '_ghi', 'jkl', '_mno', 'pqrs']
res= ''
for w in names:
 res= res + w if w[0] != '_' else ''
 z= 1
print 'res1:', res

res= ''
for w in names:
 res= res + (w if w[0] != '_' else '')
 z= 1
print 'res2:', res

 if __name__ == '__main__':
main()

 Result:
 [Dbg]
 res1: pqrs
 res2: abcdefjklpqrs
 
 But to give them credit though, in Whats new in Python 2.5: PEP 308,
 they do mention that as a matter of style you should parenthesise the
 if-expression, and the example given consistes of just a simple
 assignment of the if-expr to a name.
 - Paddy.
 
Yes, I agree.  The ternary operator is a step forward.

I was trying to make the point that the parentheses are necessary if X 
is more than a simple value.  It's a pity that one finds this out by 
experiment rather than definition.

Colin W.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Conditional expressions - PEP 308

2007-01-31 Thread Steven Bethard
Colin J. Williams wrote:
 It would be helpful if the rules of the game were spelled out more clearly.
 
 The conditional expression is defined as X if C else Y.
 We don't know the precedence of the if operator.  From the little test 
 below, it seem to have a lower precedence than or.
 
 Thus, it is desirable for the user to put the conditional expression in 
 parentheses.

Could you submit a documentation patch?

  http://sourceforge.net/tracker/?group_id=5470atid=105470

It doesn't need to be in LaTeX.  Plain text is fine.  Just indicate in 
what document you think text should be added.

STeVe
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Conditional expressions - PEP 308

2007-01-31 Thread Ziga Seilnacht
Colin J. Williams wrote:
 It would be helpful if the rules of the game were spelled out more clearly.

 The conditional expression is defined as X if C else Y.
 We don't know the precedence of the if operator.  From the little test
 below, it seem to have a lower precedence than or.

The rules are specified in the Python Reference Manual:
http://docs.python.org/ref/Booleans.html

Ziga

-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Conditional expressions - PEP 308

2007-01-31 Thread Delaney, Timothy (Tim)
Colin J. Williams wrote:

 Yes, I agree.  The ternary operator is a step forward.

That's still debateable ;)

Pro: It puts paid to the python doesn't have a ternary operator and
and/or abuse.

Con: It shouldn't ever be used.

Cheers,

Tim Delaney
-- 
http://mail.python.org/mailman/listinfo/python-list


Conditional expressions - PEP 308

2007-01-30 Thread Colin J. Williams
It would be helpful if the rules of the game were spelled out more clearly.

The conditional expression is defined as X if C else Y.
We don't know the precedence of the if operator.  From the little test 
below, it seem to have a lower precedence than or.

Thus, it is desirable for the user to put the conditional expression in 
parentheses.

Colin W.

# condExpr.py
# PEP 308 defines a conditional expression as X if C else Y
# but we don't know exactly what X is supposed to be.
# It doesn't seem to be spelled out in the syntax.

def main():
   names= ['abc', 'def', '_ghi', 'jkl', '_mno', 'pqrs']
   res= ''
   for w in names:
res= res + w if w[0] != '_' else ''
z= 1
   print 'res1:', res

   res= ''
   for w in names:
res= res + (w if w[0] != '_' else '')
z= 1
   print 'res2:', res

if __name__ == '__main__':
   main()

Result:
[Dbg]
res1: pqrs
res2: abcdefjklpqrs

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Conditional expressions - PEP 308

2007-01-30 Thread Paddy
On Jan 30, 9:51 pm, Colin J. Williams [EMAIL PROTECTED] wrote:
 It would be helpful if the rules of the game were spelled out more clearly.

 The conditional expression is defined as X if C else Y.
 We don't know the precedence of the if operator.  From the little test
 below, it seem to have a lower precedence than or.

 Thus, it is desirable for the user to put the conditional expression in
 parentheses.

 Colin W.

 # condExpr.py
 # PEP 308 defines a conditional expression as X if C else Y
 # but we don't know exactly what X is supposed to be.
 # It doesn't seem to be spelled out in the syntax.

 def main():
names= ['abc', 'def', '_ghi', 'jkl', '_mno', 'pqrs']
res= ''
for w in names:
 res= res + w if w[0] != '_' else ''
 z= 1
print 'res1:', res

res= ''
for w in names:
 res= res + (w if w[0] != '_' else '')
 z= 1
print 'res2:', res

 if __name__ == '__main__':
main()

 Result:
 [Dbg]
 res1: pqrs
 res2: abcdefjklpqrs

But to give them credit though, in Whats new in Python 2.5: PEP 308,
they do mention that as a matter of style you should parenthesise the
if-expression, and the example given consistes of just a simple
assignment of the if-expr to a name.
- Paddy.

-- 
http://mail.python.org/mailman/listinfo/python-list