Converting a varargs tuple to a list - a definite pitfall for new comers to Python

metaperl metaperl at gmail.com
Fri Sep 15 06:38:47 EDT 2006


John Machin wrote:
> metaperl.etc at gmail.com wrote:
> > The following program does not work if you uncomment     #lis =
> > ["xmms2"] + list(args)
> >
> > Evidently Python is opting for the nullary constructor list() as
> > opposed to the other one which takes a sequence. But no newcomer would know this.
>
> Are you using "the nullary constructor list()" to mean "the 0-argument
> function list() that appears later in the script", and "the other one
> which takes a sequence" to mean the builtin function list()"???

No,  I'm talking about listing 2 here:
http://www-128.ibm.com/developerworks/library/os-python4/index.html

which states:
"If you look closely at the description for the list class in Listing
2, you'll see that two different constructors are provided. One takes
no arguments, and the other takes a sequence class."

and I figured that since the lower bound on arguments to *args could
zero, that Python was
default to the nullary constructor even before the function got its
args.

paranoia will do these things to you.


>
> >  And the Python docs dont give a good example of dealing with
> > taking a sequence of args and converting it to a list.
>
> You have produced 2 perfectly good examples yourself. What's your
> point?

I just mean that this:
http://docs.python.org/tut/node6.html#SECTION006730000000000000000

does not use list() at all.



> Here's a tip: when you get into a pickle like that, try running
> pychecker and/or pylint over your code. Here's what pychecker has to
> say:
>
> metaperllist.py:4: Invalid arguments to (list), got 1, expected 0
> metaperllist.py:10: (list) shadows builtin


Great suggestion. I had not heard of those. Thanks.




More information about the Python-list mailing list