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

Curious2learn picture Curious2learn · Aug 20, 2010 · Viewed 16.8k times · Source

Consider the following function, which does not work in Python, but I will use to explain what I need to do.

def exampleFunction(a, b, c = a):
    ...function body...

That is I want to assign to variable c the same value that variable a would take, unless an alternative value is specified. The above code does not work in python. Is there a way to do this?

Thank you.

Answer

Nick T picture Nick T · Aug 20, 2010
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.