deamon
deamon

Reputation: 92377

default values for variable argument list in Python

Is it possible to set a default value for a variable argument list in Python 3?

Something like:

def do_it(*args=(2, 5, 21)):
     pass

I wonder that a variable argument list is of type tuple but no tuple is accepted here.

Upvotes: 7

Views: 4356

Answers (2)

Paul Hildebrandt
Paul Hildebrandt

Reputation: 2754

Initializing a list like that usually isn't a good idea.

The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes. For example, the following function accumulates the arguments passed to it on subsequent calls

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
rint f(3)

This will print

[1]
[1, 2]
[1, 2, 3]

I generally check it something is passed in and if not then init it in the function body.

Upvotes: 1

kenm
kenm

Reputation: 23905

If not syntactically, then depending on what behavior you want:

def do_it(*args):
    if not args: args = (2, 5, 21)

or

def do_it(a=2, b=5, c=21, *args):
    args = (a,b,c)+args

should do it.

Upvotes: 7

Related Questions