DEV Community

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

Posted on • Edited on

Keyword-Only Parameters in Python function

Buy Me a Coffee

*Memos:

You can set keyword-only parameters for a function as shown below:

*Memos:

  • A keyword-only parameter is the parameter which only accepts a keyword argument.
  • All the parameters after * are keyword-only parameters.
  • Keyword-only parameters are added from Python 3.0.
  • The doc officially says keyword-only arguments but they're actually keyword-only parameters.

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: * argument may appear only once  def func(fname, lname, age, gender, *): pass # SyntaxError: named arguments must follow bare * 
Enter fullscreen mode Exit fullscreen mode
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"}) func("John", "Smith", gender="Male", age=36) func("John", "Smith", **{"gender":"Male", "age":36}) func(fname="John", lname="Smith", age=36, gender="Male") func(**{"fname":"John", "lname":"Smith", "age":36, "gender":"Male"}) func(age=36, gender="Male", fname="John", lname="Smith") func(**{"age":36, "gender":"Male", "fname":"John", "lname":"Smith"}) # John Smith 36 Male  func("John", "Smith", 36, "Male") # TypeError: func() takes 2 positional arguments but 4 were given 
Enter fullscreen mode Exit fullscreen mode
def func(*, fname, lname, age, gender): print(fname, lname, age, gender) func(fname="Anna", lname="Brown", age=27, gender="Female") func(**{"fname":"Anna", "lname":"Brown", "age":27, "gender":"Female"}) func(age=27, gender="Female", fname="Anna", lname="Brown") func(**{"age":27, "gender":"Female", "fname":"Anna", "lname":"Brown"}) # Anna Brown 27 Female  func("Anna", "Brown", 27, "Female") # TypeError: func() takes 0 positional arguments but 4 were given 
Enter fullscreen mode Exit fullscreen mode

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: * argument may appear only once  def func(fname="John", lname="Smith", age=36, gender="Male", *): pass # SyntaxError: named arguments must follow bare * 
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", 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}) func(fname="Anna", lname="Brown", age=27, gender="Female") func(**{"fname":"Anna", "lname":"Brown", "age":27, "gender":"Female"}) func(age=27, gender="Female", fname="Anna", lname="Brown") func(**{"age":27, "gender":"Female", "fname":"Anna", "lname":"Brown"}) # Anna Brown 27 Female  func("Anna", "Brown", 27, "Female") # TypeError: func() takes from 0 to 2 positional arguments but 4 were given 
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(fname="Anna", lname="Brown", age=27, gender="Female") func(**{"fname":"Anna", "lname":"Brown", "age":27, "gender":"Female"}) func(age=27, gender="Female", fname="Anna", lname="Brown") func(**{"age":27, "gender":"Female", "fname":"Anna", "lname":"Brown"}) # Anna Brown 27 Female  func("Anna", "Brown", 27, "Female") # TypeError: func() takes 0 positional arguments but 4 were given 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)