another newbie question: why should you use "*args" ?
Dustan
DustanGroups at gmail.com
Wed Jan 31 07:48:57 EST 2007
On Jan 31, 5:41 am, stef <s.mien... at id.umcn.nl> wrote:
> why should I use *args,
> as in my ignorance,
> making use of a list (or tupple) works just as well,
> and is more flexible in it's calling.
Others have mentioned the instances in which it's actually useful -
for catch-all arguments. But you also should take into consideration
the aesthetics, since python is supposed to be an aesthetically nice
language.
> So the simple conclusion might be: never use "*args",
> or am I overlooking something ?
>
> # method 1
> def execute (self, *args):
> for i in range ( len(args) ):
> ... do something
>
> # method 2
> def chunk_plot(self, list):
> for i in range ( len(list) ):
> .... do something
It's bad practice to use built-ins like 'list' as a regular variable
name.
> # calling method 1:
> execute (S[0], S[4] )
>
> # calling method 2:
> execute ( ( S[0], S[4] ) )
Let's take a look at those side-by-side:
execute (S[0], S[4] )
execute ( ( S[0], S[4] ) )
Now, which one *looks* better?
> # or *the extra flexibility)
> mylist = ( S[0], S[4] )
> execute ( mylist )
Also, take into consideration the opposite end of the pole; you have
your list of arguments (args), and your about to call a function that
was declared something like this:
def someFunction(arg1, arg2, arg3):
# etc.
Which is clearer?
someFunction(*args)
someFunction(args[0], args[1], args[2])
And if you've got a variable number of arguments, it becomes virtually
impossible to avoid using the *args syntax.
And that doesn't even begin to cover the need for **kargs! (which, if
you haven't noticed, is generally used next to *args)
It turns out that it's not really necessary in a static-typed language
like java (although java 5.0 introduced it); it's the dynamic nature
of python that makes these syntactic sugars necessary. And without
them, function calls can get really ugly.
> thanks,
> Stef Mientki
More information about the Python-list
mailing list