Setting the default value of a function input to equal another input in Python Setting the default value of a function input to equal another input in Python python python

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