Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 232
e9e9s Avatar asked Apr 07 '17 13:04

e9e9s


People also ask

How do you pass multiple optional arguments in Python?

Using Python optional arguments using **kwargs The ** allows us to pass any number of keyword arguments. The main difference between single asterisk *args and double **kwargs is that the *args contain non-keyword arguments while **kwargs contains keyword arguments.

How do you initialize an optional argument in Python?

To add optional arguments to classes in Python, we have to assign some default values to the arguments in the class's constructor function signature. Adding default values is a straightforward task. We have to equate arguments to their default values like x = 3 , name = "Untitled" , etc.

How do you indicate optional arguments?

To indicate optional arguments, Square brackets are commonly used, and can also be used to group parameters that must be specified together. To indicate required arguments, Angled brackets are commonly used, following the same grouping conventions as square brackets.


1 Answers

**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!
like image 121
devautor Avatar answered Sep 20 '22 15:09

devautor