[Solved]: non-default argument follows default argument

Once in your life, you must have faced this error in Python

non-default argument follows default argument

Why?

In Python, normally you can't define non-default arguments after default arguments in a function, method or class.

  • non-default arguments
def greet(name):
    return f"Welcome {name}"
  • default arguments
def greet(name='Rajesh'):
    return f"Welcome {name}"

So, a combination of both of these looks something like this

def greet(name, place='Home'):
    return f"Welcome {name}, to {place}"

The above code is 100% correct. It works great.

But

def greet(name='Rajesh', place):
    return f"Welcome {name}, to {place}"

Executing this code will log, non-default argument follows default argument.

Solution?

The solution is very simple, just use * at 0th index in the definition.

Example

def greet(*, name='Rajesh', place):
    return f"Welcome {name}, to {place}"

This was introduced in Python 3.4

Don;t forget to pass required keyword arguments while calling the function, method or class

>>> greet(place='School')
Welcome Rajesh, to School

Thank you
Cheers

23