*Memos:
- My post explains a function.
- My post explains parameters and arguments in function.
- My post explains positional-only parameters in function.
- My post explains keyword-only parameters in function.
You can set positional-only parameters and keyword-only parameters together for a function as shown below. */
must be before *
:
The parameters without default values:
def func(fname, /, lname, age, *, gender): pass
def func(fname, lname, /, *, age, gender): pass
# No error
def func(fname, *, lname, age, /, gender): pass
# SyntaxError: / must be ahead of *
def func(fname, /, lname, age, *, gender):
print(fname, lname, age, gender)
func("John", "Smith", 36, gender="Male")
func("John", "Smith", 36, **{"gender":"Male"})
func("John", lname="Smith", age=36, gender="Male")
func("John", **{"lname":"Smith", "age":36, "gender":"Male"})
func("John", "Smith", gender="Male", age=36)
func("John", "Smith", **{"gender":"Male", "age":36})
# John Smith 36 Male
func("John", "Smith", 36, "Male")
# TypeError: func() takes 3 positional arguments but 4 were given
func(fname="John", lname="Smith", age=36, gender="Male")
func(**{"fname":"John", "lname":"Smith", "age":36, "gender":"Male"})
# TypeError: func() got some positional-only arguments passed
# as keyword arguments: 'fname'
def func(fname, lname, /, *, age, gender):
print(fname, lname, age, gender)
func("John", "Smith", age=36, gender="Male")
func("John", "Smith", **{"age":36, "gender":"Male"})
# John Smith 36 Male
func("John", "Smith", 36, "Male")
# TypeError: func() takes 2 positional arguments but 4 were given
func(fname="John", lname="Smith", age=36, gender="Male")
func(**{"fname":"John", "lname":"Smith", "age":36, "gender":"Male"})
# TypeError: func() got some positional-only arguments passed
# as keyword arguments: 'fname, lname'
The parameters with default values:
def func(fname="John", /, lname="Smith", age=36, *, gender="Male"): pass
def func(fname="John", lname="Smith", /, *, age=36, gender="Male"): pass
# No error
def func(fname="John", *, lname="Smith", age=36, /, gender="Male"): pass
# SyntaxError: / must be ahead of *
def func(fname="John", /, lname="Smith", age=36, *, gender="Male"):
print(fname, lname, age, gender)
func()
# John Smith 36 Male
func("Anna", "Brown", 27, gender="Female")
func("Anna", "Brown", 27, **{"gender":"Female"})
func("Anna", lname="Brown", age=27, gender="Female")
func("Anna", **{"lname":"Brown", "age":27, "gender":"Female"})
func("Anna", age=27, gender="Female", lname="Brown")
func("Anna", **{"age":27, "gender":"Female", "lname":"Brown"})
# Anna Brown 27 Female
func("Anna", "Brown", 27, "Female")
# TypeError: func() takes from 0 to 3 positional arguments but 4 were given
func(fname="Anna", lname="Brown", age=27, gender="Female")
func(**{"fname":"Anna", "lname":"Brown", "age":27, "gender":"Female"})
# TypeError: func() got some positional-only arguments passed
# as keyword arguments: 'fname'
def func(fname="John", lname="Smith", /, *, age=36, gender="Male"):
print(fname, lname, age, gender)
func("John", "Smith", age=36, gender="Male")
func("John", "Smith", **{"age":36, "gender":"Male"})
# John Smith 36 Male
func("John", "Smith", 36, "Male")
# TypeError: func() takes from 0 to 2 positional arguments but 4 were given
func(fname="John", lname="Smith", age=36, gender="Male")
func(**{"fname":"John", "lname":"Smith", "age":36, "gender":"Male"})
# TypeError: func() got some positional-only arguments passed
# as keyword arguments: 'fname, lname'
Top comments (0)