Setting the default value of a function input to equal another input in Python
def example(a, b, c=None): if c is None: c = a ...
The default value for the keyword argument can't be a variable (if it is, it's converted to a fixed value when the function is defined.) Commonly used to pass arguments to a main function:
def main(argv=None): if argv is None: argv = sys.argv
If None
could be a valid value, the solution is to either use *args
/**kwargs
magic as in carl's answer, or use a sentinel object. Libraries that do this include attrs and Marshmallow, and in my opinion it's much cleaner and likely faster.
missing = object()def example(a, b, c=missing): if c is missing: c = a ...
The only way for c is missing
to be true is for c
to be exactly that dummy object you created there.
This general pattern is probably the best and most readable:
def exampleFunction(a, b, c = None): if c is None: c = a ...
You have to be careful that None
is not a valid state for c
.
If you want to support 'None' values, you can do something like this:
def example(a, b, *args, **kwargs): if 'c' in kwargs: c = kwargs['c'] elif len(args) > 0: c = args[0] else: c = a
One approach is something like:
def foo(a, b, c=None): c = a if c is None else c # do something