开发者

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开发者_StackOverflow中文版)):
     pass

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


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.


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]
  • Stolen from: http://www.network-theory.co.uk/docs/pytut/DefaultArgumentValues.html

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜