Is this a legal / acceptable statement ?

bruno at modulix onurb at xiludom.gro
Fri May 5 10:46:53 EDT 2006


Philippe Martin wrote:
> Hi,
> 
> This code works, but is it "appropriate" ?

appropriate for what ?-)

> l_init = False
> # corrected typo, cf other post in this thread
> if True == l_init and 1234 == l_value:
>  print 'l_value is initialized'

Do this in production code, and have one of the first Python entry in
the Daily WTF !-)

What are you trying to do, exactly ? I've been scratching my head for at
least 5 minutes without finding any sensible reason to write such code.


> I know I can do this with a try but ...

???


<ot>
Slightly ot, but since you ask for idioms:

1/ Since binding (so-called 'assignment') is a statement (not an
expression), you can as well write your equality test the 'normal' way:

>>>  if l_init == True and l_value == 1234:
...      pass

the "litteral value == variable" idiom comes from languages where
assignement being an expression, one could 'typo' '=' for '==', usually
leading to unwanted result !-)

2/ also, testing for equality against True or False is a bad idea, since
there are some things that will eval to false in a boolean context
without actually being equal to False:
>>> for item in [[], (), {}, None, '']:
...     print item, " == False ?", item == False
...     if not item:
...             print "but still evals to False..."
...
[]  == False ? False
but still evals to False...
()  == False ? False
but still evals to False...
{}  == False ? False
but still evals to False...
None  == False ? False
but still evals to False...
  == False ? False
but still evals to False...
>>>

so :
>>> if l_init and l_value == 1234:
...     pass

This still doesn't make sense to me, but it's at least a bit more
readable !-)
</ot>

-- 
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb at xiludom.gro'.split('@')])"



More information about the Python-list mailing list