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