Python style advice

Terry Reedy tjreedy at udel.edu
Tue Feb 10 00:02:26 EST 2004


"Nick Craig-Wood" <ncw at axis.demon.co.uk> wrote in message
news:slrnc2enr8.bmp.ncw at irishsea.home.craig-wood.com...
> Python newbie advice needed!
>
> I'm tring to write what I would have expressed in Perl as
>
>     my ($a, $b, $c) = @array;
>
> This is very similar to the python statement
>
>     a, b, c = array
>
> BUT, the Python will throw an exception if array isn't exactly 3 elements
long,

This is an intentional feature.  Mismatches are often bugs.

> wheras the Perl will work for any length of @array,
> either throwing away excess elements or setting the variables to
> undef, ie like this

Guido's philosophy is that the interpreter should resist guessing like this
when code is at least half likely to be buggy.

> And this works however many elements array has
>
>     a, b, c = (array + 3*[None])[:3]
>
> but it doesn't seem very Pythonic - is there a better way?

Being explicitly generic is Pythonic to me.  Or do something like

a=b=c=None
try: c=array[2]
  try: b=array[1]
    try: a=array[1]
    except: pass
  except: pass
except: pass

but I prefer the one liner here.  It is easier to extend to more names.

Terry J. Reedy









More information about the Python-list mailing list