Below is examples of passing arguments to python via regular argument assignment, and tuples and *tuples, and dictionaries and **dictionaries.

Here is my gist link for it: https://gist.github.com/anonymous/271d6160cdd90a482b40 (older)

Not covering all methods (for example didnt cover default values if argument is not passed http://lgiordani.com/blog/2015/02/11/default-arguments-in-python/#.VsBpuPIrKHs although default values for none stated argument can be achieved if *arg & *kargs are in the function prototype/definition), but most of them covered in the test script below
builds upon:
* http://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/
* http://stackoverflow.com/questions/9539921/python-function-with-optional-arguments
* and https://gist.github.com/c0ldlimit/4091273 (added test cases to this one)

Study the output and play around with the script to get better understanding
I ran it like this “python test.py
Im using python 2.7.3

Test Python Script: test.py

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
################################################################
# This example passes one formal (positional) argument, and two more variable length arguments.
def test_var_args(farg, *args):
print "######### test_var_args #########"
print "formal arg:", farg
for arg in args:
print "another arg:", arg
test_var_args(1, "two", 3)
################################################################
# Here is an example of how to use the keyworded form. Again, one formal argument and two keyworded variable arguments are passed.
def test_var_kwargs(farg, **kwargs):
print "######### test_var_kwargs #########"
print "formal arg:", farg
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
test_var_kwargs(farg=1, myarg2="two", myarg3=3)
test_var_kwargs(farg=1, **{"myarg2":"twotwo", "myarg3":3})
################################################################
# This special syntax can be used, not only in function definitions, but also when calling a function.
def test_var_args_call(arg1, arg2, arg3):
print "######### test_var_args_call #########"
print "arg1:", arg1
print "arg2:", arg2
print "arg3:", arg3
args = ("two", 3)
test_var_args_call(1, *args) # imagine this does test_var_args_call(1,"two",3)
################################################################
# Here is an example using the keyworded form when calling a function:
def test_var_args_call(arg1, arg2, arg3):
print "######### test_var_args_call #########"
print "arg1:", arg1
print "arg2:", arg2
print "arg3:", arg3
kwargs = {"arg3": 3, "arg2": "two"}
test_var_args_call(1, **kwargs)
################################################################
# Here is an example using the keyworded form when calling a function:
def test_var_args_call(arg1, arg2, arg3,arg4): # note the function can be redefined without issues
print "######### test_var_args_call #########"
print "arg1:", arg1
print "arg2:", arg2
print "arg3:", arg3
print "arg4:", arg4
kwargs = {"arg4": 3, "arg3": "two"}
test_var_args_call(1,2, **kwargs) # same as test_var_args(1,2,"two",3)
test=(3,2)
test_var_args_call(*test, **kwargs) # same as test_var_args(3,2,"two",3)
################################################################
# testing all 3
def test_var_args_call3(arg1, arg2, arg3,arg4,arg5):
print "######### test_var_args_call #########"
print "arg1:", arg1
print "arg2:", arg2
print "arg3:", arg3
print "arg4:", arg4
print "arg5:", arg5
kwargs = {"arg5": 3, "arg4": "two"}
test=("Asd",3,2)
test_var_args_call3(*test, **kwargs)
test=(3,2)
test_var_args_call3("final",*test, **kwargs) # same as test_var_call3("final",3,2,"two",3)
################################################################
# testing optional vars: a,b are needed everything else optional
def test1(a,b,*arg,**kargs):
print "###### test1 ########"
print "a:", a
print "b:", b
print "arg:", arg
print "karg:", kargs
test1("a","b")
# test1("a") # FAIL - will error out
test1(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234})
test1(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234})
# test1(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test1(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out
################################################################
# testing optional vars: a,b are needed everything else optional
def test2(a,b,*arg):
print "###### test2 ########"
print "a:", a
print "b:", b
print "arg:", arg
test2("a","b")
# test1("a") # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out
test2(5,4,("asdf","a234",234,543),*(234,643))
test2(5,4,("asdf","a234",234,543),("zebrt","lol"),*(234,643))
test2(5,4,*("asdf","a234",234,543))
# test2(5,4,*("asdf","a234",234,543),*(234,643)) # FAIL - will error out
################################################################
# testing optional vars: a,b are needed everything else optional
def test2(a,b,**kargs):
print "###### test2 ########"
print "a:", a
print "b:", b
print "kargs:", kargs
test2("a","b")
# test2("a") # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
test2(5,4,**{"toy":234,"sky":'blue'}) # FAIL - will error out
# test2(5,4,{"toy":234,"sky":'blue'}) # FAIL - will error out
# test2(5,4,**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643)) # FAIL - will error out
## INTERESTING NOTES:
# only 1 *(a,b,c) can be passed as an arg
# only 1 **{dictionary} can be passed as kwarg
# multiple (a,b,c), can be passed as an arg
# {a,b,c} are passed as a variable and fail because our first 2 none-optional args are taken
################################################################ # This example passes one formal (positional) argument, and two more variable length arguments. def test_var_args(farg, *args): print "######### test_var_args #########" print "formal arg:", farg for arg in args: print "another arg:", arg test_var_args(1, "two", 3) ################################################################ # Here is an example of how to use the keyworded form. Again, one formal argument and two keyworded variable arguments are passed. def test_var_kwargs(farg, **kwargs): print "######### test_var_kwargs #########" print "formal arg:", farg for key in kwargs: print "another keyword arg: %s: %s" % (key, kwargs[key]) test_var_kwargs(farg=1, myarg2="two", myarg3=3) test_var_kwargs(farg=1, **{"myarg2":"twotwo", "myarg3":3}) ################################################################ # This special syntax can be used, not only in function definitions, but also when calling a function. def test_var_args_call(arg1, arg2, arg3): print "######### test_var_args_call #########" print "arg1:", arg1 print "arg2:", arg2 print "arg3:", arg3 args = ("two", 3) test_var_args_call(1, *args) # imagine this does test_var_args_call(1,"two",3) ################################################################ # Here is an example using the keyworded form when calling a function: def test_var_args_call(arg1, arg2, arg3): print "######### test_var_args_call #########" print "arg1:", arg1 print "arg2:", arg2 print "arg3:", arg3 kwargs = {"arg3": 3, "arg2": "two"} test_var_args_call(1, **kwargs) ################################################################ # Here is an example using the keyworded form when calling a function: def test_var_args_call(arg1, arg2, arg3,arg4): # note the function can be redefined without issues print "######### test_var_args_call #########" print "arg1:", arg1 print "arg2:", arg2 print "arg3:", arg3 print "arg4:", arg4 kwargs = {"arg4": 3, "arg3": "two"} test_var_args_call(1,2, **kwargs) # same as test_var_args(1,2,"two",3) test=(3,2) test_var_args_call(*test, **kwargs) # same as test_var_args(3,2,"two",3) ################################################################ # testing all 3 def test_var_args_call3(arg1, arg2, arg3,arg4,arg5): print "######### test_var_args_call #########" print "arg1:", arg1 print "arg2:", arg2 print "arg3:", arg3 print "arg4:", arg4 print "arg5:", arg5 kwargs = {"arg5": 3, "arg4": "two"} test=("Asd",3,2) test_var_args_call3(*test, **kwargs) test=(3,2) test_var_args_call3("final",*test, **kwargs) # same as test_var_call3("final",3,2,"two",3) ################################################################ # testing optional vars: a,b are needed everything else optional def test1(a,b,*arg,**kargs): print "###### test1 ########" print "a:", a print "b:", b print "arg:", arg print "karg:", kargs test1("a","b") # test1("a") # FAIL - will error out test1(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234}) test1(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # test1(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out # test1(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out ################################################################ # testing optional vars: a,b are needed everything else optional def test2(a,b,*arg): print "###### test2 ########" print "a:", a print "b:", b print "arg:", arg test2("a","b") # test1("a") # FAIL - will error out # test2(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234}) # FAIL - will error out # test2(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out # test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out # test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out test2(5,4,("asdf","a234",234,543),*(234,643)) test2(5,4,("asdf","a234",234,543),("zebrt","lol"),*(234,643)) test2(5,4,*("asdf","a234",234,543)) # test2(5,4,*("asdf","a234",234,543),*(234,643)) # FAIL - will error out ################################################################ # testing optional vars: a,b are needed everything else optional def test2(a,b,**kargs): print "###### test2 ########" print "a:", a print "b:", b print "kargs:", kargs test2("a","b") # test2("a") # FAIL - will error out # test2(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234}) # FAIL - will error out # test2(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out # test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out test2(5,4,**{"toy":234,"sky":'blue'}) # FAIL - will error out # test2(5,4,{"toy":234,"sky":'blue'}) # FAIL - will error out # test2(5,4,**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out # test2(5,4,*("asdf","a234",234,543),*(234,643)) # FAIL - will error out ## INTERESTING NOTES: # only 1 *(a,b,c) can be passed as an arg # only 1 **{dictionary} can be passed as kwarg # multiple (a,b,c), can be passed as an arg # {a,b,c} are passed as a variable and fail because our first 2 none-optional args are taken
################################################################
# This example passes one formal (positional) argument, and two more variable length arguments.
def test_var_args(farg, *args):
    print "######### test_var_args #########"
    print "formal arg:", farg
    for arg in args:
        print "another arg:", arg

test_var_args(1, "two", 3)

################################################################
# Here is an example of how to use the keyworded form. Again, one formal argument and two keyworded variable arguments are passed.
def test_var_kwargs(farg, **kwargs):
    print "######### test_var_kwargs #########"
    print "formal arg:", farg
    for key in kwargs:
        print "another keyword arg: %s: %s" % (key, kwargs[key])

test_var_kwargs(farg=1, myarg2="two", myarg3=3)
test_var_kwargs(farg=1, **{"myarg2":"twotwo", "myarg3":3})

################################################################
# This special syntax can be used, not only in function definitions, but also when calling a function.
def test_var_args_call(arg1, arg2, arg3):
    print "######### test_var_args_call #########"
    print "arg1:", arg1
    print "arg2:", arg2
    print "arg3:", arg3

args = ("two", 3)
test_var_args_call(1, *args) # imagine this does test_var_args_call(1,"two",3)

################################################################
# Here is an example using the keyworded form when calling a function:
def test_var_args_call(arg1, arg2, arg3):
    print "######### test_var_args_call #########"
    print "arg1:", arg1
    print "arg2:", arg2
    print "arg3:", arg3

kwargs = {"arg3": 3, "arg2": "two"}
test_var_args_call(1, **kwargs)

################################################################
# Here is an example using the keyworded form when calling a function:
def test_var_args_call(arg1, arg2, arg3,arg4): # note the function can be redefined without issues
    print "######### test_var_args_call #########"
    print "arg1:", arg1
    print "arg2:", arg2
    print "arg3:", arg3
    print "arg4:", arg4

kwargs = {"arg4": 3, "arg3": "two"}
test_var_args_call(1,2, **kwargs) # same as test_var_args(1,2,"two",3)
test=(3,2)
test_var_args_call(*test, **kwargs) # same as test_var_args(3,2,"two",3)

################################################################
# testing all 3
def test_var_args_call3(arg1, arg2, arg3,arg4,arg5):
    print "######### test_var_args_call #########"
    print "arg1:", arg1
    print "arg2:", arg2
    print "arg3:", arg3
    print "arg4:", arg4
    print "arg5:", arg5

kwargs = {"arg5": 3, "arg4": "two"}
test=("Asd",3,2)
test_var_args_call3(*test, **kwargs)
test=(3,2)
test_var_args_call3("final",*test, **kwargs) # same as test_var_call3("final",3,2,"two",3)

################################################################
# testing optional vars: a,b are needed everything else optional
def test1(a,b,*arg,**kargs):
    print "###### test1 ########"
    print "a:", a
    print "b:", b
    print "arg:", arg
    print "karg:", kargs

test1("a","b")
# test1("a") # FAIL - will error out
test1(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234})
test1(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234})
# test1(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test1(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out

################################################################
# testing optional vars: a,b are needed everything else optional
def test2(a,b,*arg):
    print "###### test2 ########"
    print "a:", a
    print "b:", b
    print "arg:", arg

test2("a","b")
# test1("a") # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out
test2(5,4,("asdf","a234",234,543),*(234,643))
test2(5,4,("asdf","a234",234,543),("zebrt","lol"),*(234,643))
test2(5,4,*("asdf","a234",234,543))
# test2(5,4,*("asdf","a234",234,543),*(234,643)) # FAIL - will error out

################################################################
# testing optional vars: a,b are needed everything else optional
def test2(a,b,**kargs):
    print "###### test2 ########"
    print "a:", a
    print "b:", b
    print "kargs:", kargs

test2("a","b")
# test2("a") # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643),**{"car":"toyota","price":234}) # FAIL - will error out
test2(5,4,**{"toy":234,"sky":'blue'}) # FAIL - will error out
# test2(5,4,{"toy":234,"sky":'blue'}) # FAIL - will error out
# test2(5,4,**{"car":"toyota","price":234},**{"toy":234,"sky":'blue'}) # FAIL - will error out
# test2(5,4,*("asdf","a234",234,543),*(234,643)) # FAIL - will error out

## INTERESTING NOTES:
# only 1 *(a,b,c) can be passed as an arg
# only 1 **{dictionary} can be passed as kwarg
# multiple (a,b,c), can be passed as an arg
# {a,b,c} are passed as a variable and fail because our first 2 none-optional args are taken

Output:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# python test.py
######### test_var_args #########
formal arg: 1
another arg: two
another arg: 3
######### test_var_kwargs #########
formal arg: 1
another keyword arg: myarg2: two
another keyword arg: myarg3: 3
######### test_var_kwargs #########
formal arg: 1
another keyword arg: myarg2: twotwo
another keyword arg: myarg3: 3
######### test_var_args_call #########
arg1: 1
arg2: two
arg3: 3
######### test_var_args_call #########
arg1: 1
arg2: two
arg3: 3
######### test_var_args_call #########
arg1: 1
arg2: 2
arg3: two
arg4: 3
######### test_var_args_call #########
arg1: 3
arg2: 2
arg3: two
arg4: 3
######### test_var_args_call #########
arg1: Asd
arg2: 3
arg3: 2
arg4: two
arg5: 3
######### test_var_args_call #########
arg1: final
arg2: 3
arg3: 2
arg4: two
arg5: 3
###### test1 ########
a: a
b: b
arg: ()
karg: {}
###### test1 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), (234, 643))
karg: {'car': 'toyota', 'price': 234}
###### test1 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), 234, 643)
karg: {'car': 'toyota', 'price': 234}
###### test2 ########
a: a
b: b
arg: ()
###### test2 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), 234, 643)
###### test2 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), ('zebrt', 'lol'), 234, 643)
###### test2 ########
a: 5
b: 4
arg: ('asdf', 'a234', 234, 543)
###### test2 ########
a: a
b: b
kargs: {}
###### test2 ########
a: 5
b: 4
kargs: {'toy': 234, 'sky': 'blue'}
# python test.py ######### test_var_args ######### formal arg: 1 another arg: two another arg: 3 ######### test_var_kwargs ######### formal arg: 1 another keyword arg: myarg2: two another keyword arg: myarg3: 3 ######### test_var_kwargs ######### formal arg: 1 another keyword arg: myarg2: twotwo another keyword arg: myarg3: 3 ######### test_var_args_call ######### arg1: 1 arg2: two arg3: 3 ######### test_var_args_call ######### arg1: 1 arg2: two arg3: 3 ######### test_var_args_call ######### arg1: 1 arg2: 2 arg3: two arg4: 3 ######### test_var_args_call ######### arg1: 3 arg2: 2 arg3: two arg4: 3 ######### test_var_args_call ######### arg1: Asd arg2: 3 arg3: 2 arg4: two arg5: 3 ######### test_var_args_call ######### arg1: final arg2: 3 arg3: 2 arg4: two arg5: 3 ###### test1 ######## a: a b: b arg: () karg: {} ###### test1 ######## a: 5 b: 4 arg: (('asdf', 'a234', 234, 543), (234, 643)) karg: {'car': 'toyota', 'price': 234} ###### test1 ######## a: 5 b: 4 arg: (('asdf', 'a234', 234, 543), 234, 643) karg: {'car': 'toyota', 'price': 234} ###### test2 ######## a: a b: b arg: () ###### test2 ######## a: 5 b: 4 arg: (('asdf', 'a234', 234, 543), 234, 643) ###### test2 ######## a: 5 b: 4 arg: (('asdf', 'a234', 234, 543), ('zebrt', 'lol'), 234, 643) ###### test2 ######## a: 5 b: 4 arg: ('asdf', 'a234', 234, 543) ###### test2 ######## a: a b: b kargs: {} ###### test2 ######## a: 5 b: 4 kargs: {'toy': 234, 'sky': 'blue'}
# python test.py
######### test_var_args #########
formal arg: 1
another arg: two
another arg: 3
######### test_var_kwargs #########
formal arg: 1
another keyword arg: myarg2: two
another keyword arg: myarg3: 3
######### test_var_kwargs #########
formal arg: 1
another keyword arg: myarg2: twotwo
another keyword arg: myarg3: 3
######### test_var_args_call #########
arg1: 1
arg2: two
arg3: 3
######### test_var_args_call #########
arg1: 1
arg2: two
arg3: 3
######### test_var_args_call #########
arg1: 1
arg2: 2
arg3: two
arg4: 3
######### test_var_args_call #########
arg1: 3
arg2: 2
arg3: two
arg4: 3
######### test_var_args_call #########
arg1: Asd
arg2: 3
arg3: 2
arg4: two
arg5: 3
######### test_var_args_call #########
arg1: final
arg2: 3
arg3: 2
arg4: two
arg5: 3
###### test1 ########
a: a
b: b
arg: ()
karg: {}
###### test1 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), (234, 643))
karg: {'car': 'toyota', 'price': 234}
###### test1 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), 234, 643)
karg: {'car': 'toyota', 'price': 234}
###### test2 ########
a: a
b: b
arg: ()
###### test2 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), 234, 643)
###### test2 ########
a: 5
b: 4
arg: (('asdf', 'a234', 234, 543), ('zebrt', 'lol'), 234, 643)
###### test2 ########
a: 5
b: 4
arg: ('asdf', 'a234', 234, 543)
###### test2 ########
a: a
b: b
kargs: {}
###### test2 ########
a: 5
b: 4
kargs: {'toy': 234, 'sky': 'blue'}

The end

Leave a Reply

Your email address will not be published. Required fields are marked *