python arg and kwargs

*argv

I keep seeing *argv being use in methods - from my days of C and C++ this suggests a pointer to data - but what does it mean in python ?

def test_var_args(f_arg, *argv):
    print "first normal arg:", f_arg
    for arg in argv:
        print "another arg through *argv :", arg

test_var_args('yasoob','python','eggs','test')

This outputs

first normal arg: yasoob
another arg through *argv : python
another arg through *argv : eggs
another arg through *argv : test

**kwargs

Usage of kwargs kwargs allows you to pass keyworded variable length of arguments to a function. You should use **kwargs if you want to handle named arguments in a function. Here is an example to get you going with it:

def greet_me(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.iteritems():
            print "%s == %s" %(key,value)

>>> greet_me(name="yasoob")
name == yasoob

use args and kwargs together

So can you see how we handled a keyworded argument list in our function. This is just the basics of **kwargs and you can see how useful it is. Now lets talk about how you can use *args and **kwargs to call a function with a list or dictionary of arguments.

Using *args and **kwargs to call a function So here we will see how to call a function using *args and **kwargs. Just consider that you have this little function:

def test_args_kwargs(arg1, arg2, arg3):
    print "arg1:", arg1
    print "arg2:", arg2
    print "arg3:", arg3

Now you can use args or *kwargs to pass arguments to this little function. Here’s how to do it:

first with *args

args = ("two", 3,5) test_args_kwargs(*args) arg1: two arg2: 3 arg3: 5

now with **kwargs:

>>> kwargs = {"arg3": 3, "arg2": "two","arg1":5}
>>> test_args_kwargs(**kwargs)
>>> 

Outputs

arg1: 5
arg2: two
arg3: 3

Order of using args *kwargs and formal args So if you want to use all three of these in functions then the order is

some_func(fargs,*args,**kwargs)