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?
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.
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.
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.
**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 love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With