Better writing in python

Alexandre Badez alexandre.badez at gmail.com
Wed Oct 24 09:09:28 EDT 2007


On 10/24/07, J. Clifford Dyer <jcd at sdf.lonestar.org> wrote:
>
> 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
>

Thanks for your try Cliff, I was very confused :P
More over I made some mistake when I post (to make it easiest).

Here is my real code:

with
dArguments = {
  'argName' : {
    'mandatory' : bool, # True or False
    [...], # other field we do not care here
  }
}

lMandatory = []
lOptional = []
for arg in cls.dArguments:
  if cls.dArguments[arg]['mandatory']:
    lMandatory.append(arg)
  else:
    lOptional.append(arg)
return (lMandatory, lOptional)

So, as you see, we agree each other about "if bool" or "if bool is True" ;)

So, my question was how to give it a better 'python like' look ?
Any idea ?

-- 
Alex
http://alexandre.badez.googlepages.com/
alexandre.badez at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20071024/1c7fac1a/attachment.html>


More information about the Python-list mailing list