DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Positional-Only Parameters in Python function

Buy Me a Coffee

*Memo:

Positional-only parameters can be set to a function definition as shown below:

*Memo:

  • A positional-only parameter is the parameter which only accepts a positional argument.
  • All the parameters before / are positional-only parameters.
  • Positional-only parameters are added from Python 3.8.

<Required parameters>:

def func(fname, lname, /, age, gender): pass def func(fname, lname, age, gender, /): pass # No error  def func(fname, /, lname, age, /, gender): pass # SyntaxError: / may appear only once  def func(/, fname, lname, age, gender): pass # SyntaxError: at least one argument must precede / 
Enter fullscreen mode Exit fullscreen mode
def func(fname, lname, /, age, gender): print(fname, lname, age, gender) func("John", "Smith", 36, "Male") func("John", "Smith", age=36, gender="Male") func("John", "Smith", **{"age":36, "gender":"Male"}) func("John", "Smith", gender="Male", age=36) func("John", "Smith", **{"gender":"Male", "age":36,}) # John Smith 36 Male  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' 
Enter fullscreen mode Exit fullscreen mode
def func(fname, lname, age, gender, /): print(fname, lname, age, gender) func("John", "Smith", 36, "Male") # John Smith 36 Male  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, age, gender' 
Enter fullscreen mode Exit fullscreen mode

<Optional parameters>:

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: / may appear only once  def func(/, fname="John", lname="Smith", age=36, gender="Male"): pass # SyntaxError: at least one argument must precede / 
Enter fullscreen mode Exit fullscreen mode
def func(fname="John", lname="Smith", /, age=36, gender="Male"): print(fname, lname, age, gender) func() # John Smith 36 Male  func("Anna", "Brown", 27, "Female") func("Anna", "Brown", age=27, gender="Female") func("Anna", "Brown", **{"age":27, "gender":"Female"}) func("Anna", "Brown", gender="Female", age=27) func("Anna", "Brown", **{"gender":"Female", "age":27}) # Anna Brown 27 Female  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, lname' 
Enter fullscreen mode Exit fullscreen mode
def func(fname="John", lname="Smith", age=36, gender="Male", /): print(fname, lname, age, gender) func() # John Smith 36 Male  func("Anna", "Brown", 27, "Female") # Anna Brown 27 Female  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, lname, age, gender' 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)