Search code examples
python-3.xoptional-arguments

Multiple optional arguments python


So I have a function with several optional arguments like so:

def func1(arg1, arg2, optarg1=None, optarg2=None, optarg3=None):

Optarg1 & optarg2 are usually used together and if these 2 args are specified then optarg3 is not used. By contrast, if optarg3 is specified then optarg1 & optarg2 are not used. If it were one optional argument it'd be easy for the function to "know" which argument to use:

if optarg1 != None:
    do something
else:
    do something else 

My question is how to I "tell" the function which optional argument to use when there's multiple optional arguments and not all of them are always specified? Is parsing the arguments with **kwargs the way to go?


Solution

  • **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!