Positional & Keyword-Only Parameters in Python

Buy Me a Coffee☕ *Memos: My post explains parameters and arguments in Python. My post explains positional-only parameters in Python. My post explains keyword-only parameters in Python. 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 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", lname="Smith", age=36, gender="Male") func("John", "Smith", gender="Male", age=36) # John Smith 36 Male func("John", "Smith", 36, "Male") func(fname="John", lname="Smith", age=36, gender="Male") # TypeError: func() takes 3 positional arguments but 4 were given def func(fname, lname, /, *, age, gender): print(fname, lname, age, gender) 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") # 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 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", lname="Brown", age=27, gender="Female") 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") # 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") # 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") # TypeError: func() got some positional-only arguments passed # as keyword arguments: 'fname, lname'

May 5, 2025 - 07:09
 0
Positional & Keyword-Only Parameters in Python

Buy Me a Coffee

*Memos:

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

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", lname="Smith", age=36, gender="Male")
func("John", "Smith", gender="Male", age=36)
# John Smith 36 Male

func("John", "Smith", 36, "Male")
func(fname="John", lname="Smith", age=36, gender="Male")
# TypeError: func() takes 3 positional arguments but 4 were given
def func(fname, lname, /, *, age, gender):
    print(fname, lname, age, gender)

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")
# 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

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", lname="Brown", age=27, gender="Female")
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")
# 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")
# 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")
# TypeError: func() got some positional-only arguments passed
# as keyword arguments: 'fname, lname'