Can a variable number of arguments be passed to a function? Can a variable number of arguments be passed to a function? python python

Can a variable number of arguments be passed to a function?


Yes. You can use *args as a non-keyword argument. You will then be able to pass any number of arguments.

def manyArgs(*arg):  print "I was called with", len(arg), "arguments:", arg>>> manyArgs(1)I was called with 1 arguments: (1,)>>> manyArgs(1, 2, 3)I was called with 3 arguments: (1, 2, 3)

As you can see, Python will unpack the arguments as a single tuple with all the arguments.

For keyword arguments you need to accept those as a separate actual argument, as shown in Skurmedel's answer.


Adding to unwinds post:

You can send multiple key-value args too.

def myfunc(**kwargs):    # kwargs is a dictionary.    for k,v in kwargs.iteritems():         print "%s = %s" % (k, v)myfunc(abc=123, efh=456)# abc = 123# efh = 456

And you can mix the two:

def myfunc2(*args, **kwargs):   for a in args:       print a   for k,v in kwargs.iteritems():       print "%s = %s" % (k, v)myfunc2(1, 2, 3, banan=123)# 1# 2# 3# banan = 123

They must be both declared and called in that order, that is the function signature needs to be *args, **kwargs, and called in that order.


If I may, Skurmedel's code is for python 2; to adapt it to python 3, change iteritems to items and add parenthesis to print. That could prevent beginners like me to bump into:AttributeError: 'dict' object has no attribute 'iteritems' and search elsewhere (e.g. Error “ 'dict' object has no attribute 'iteritems' ” when trying to use NetworkX's write_shp()) why this is happening.

def myfunc(**kwargs):for k,v in kwargs.items():   print("%s = %s" % (k, v))myfunc(abc=123, efh=456)# abc = 123# efh = 456

and:

def myfunc2(*args, **kwargs):   for a in args:       print(a)   for k,v in kwargs.items():       print("%s = %s" % (k, v))myfunc2(1, 2, 3, banan=123)# 1# 2# 3# banan = 123