So I have a function with several optional arguments like so:
def func1(arg1, arg2, optarg1=None, optarg2=None, optarg3=None):
Optarg1 &
**kwargs is used to let Python functions take an arbitrary number of keyword arguments and then ** unpacks a dictionary of keyword arguments. Learn More here
def print_keyword_args(**kwargs):
# kwargs is a dict of the keyword args passed to the function
print kwargs
if("optarg1" in kwargs and "optarg2" in kwargs):
print "Who needs optarg3!"
print kwargs['optarg1'], kwargs['optarg2']
if("optarg3" in kwargs):
print "Who needs optarg1, optarg2!!"
print kwargs['optarg3']
print_keyword_args(optarg1="John", optarg2="Doe")
# {'optarg1': 'John', 'optarg2': 'Doe'}
# Who needs optarg3!
# John Doe
print_keyword_args(optarg3="Maxwell")
# {'optarg3': 'Maxwell'}
# Who needs optarg1, optarg2!!
# Maxwell
print_keyword_args(optarg1="John", optarg3="Duh!")
# {'optarg1': 'John', 'optarg3': 'Duh!'}
# Who needs optarg1, optarg2!!
# Duh!
If you assign them in the call of the function you can pre-empt which parameter you are passing in.
def foo( a, b=None, c=None):
print("{},{},{}".format(a,b,c))
>>> foo(4)
4,None,None
>>> foo(4,c=5)
4,None,5