On Wed, Oct 24, 2007 at 12:09:40PM -0000, Alexandre Badez wrote regarding
Better writing in python:
>
> lMandatory = []
> lOptional = []
> for arg in cls.dArguments:
> if arg is True:
> lMandatory.append(arg)
> else:
> lOptional.append(arg)
> return (lMandatory, lOptional)
>
> I think there is a better way, but I can't see how...
>
I assume cls.dArguments is a dict, correct?
`for arg in cls.dArguments` takes each *key* for cls.dArguments and assigns it
to arg, so the line 'if arg is True' will test the truth value of each key. I
assume (you haven't shown the details here) that your dict looks like this:
cls.dArguments = { 'a': True, 'b': False, 'c': True, 'd': False, '': True, 0:
False }
and you want your for loop to do this:
lMandatory == [ 'a', 'c', '' ]
lOptional == [ 'b', 'd', 0 ]
in fact, since it's testing the truth value of the keys, not the values, you
will get this:
lMandatory == [ 'a', 'b', 'c', 'd' ]
lOptional == [ '', 0 ]
In no particular order, of course.
Also, `if x is True:` should be written as `if x:`
Actually, come to think of it, what I said above is false, because the string
'a' *is not* the boolean value True, per se: it is *equal to* True. So if you
change `if x is True:` to `if x == True:` then everything I said above holds
true, including that you should change `if x == True:` to `if x:`
As it stands, the only key in your dict that has a snowball's chance in key
largo of being marked as mandatory is the boolean value True itself.
Cheers,
Cliff
--
http://mail.python.org/mailman/listinfo/python-list