2.4. Parameter Syntax

2.4.1. Recap

def echo(a, b, c=3):
     print(a, b, c)

echo(1, 2)              # 1 2 3
echo(1, b=2)            # 1 2 3
echo(1, c=3)            # TypeError: echo() missing 1 required positional argument: 'b'
echo(1, 2, 3)           # 1 2 3
echo(1, 2, c=3)         # 1 2 3
echo(1, b=2, c=3)       # 1 2 3
echo(a=1, b=2, c=3)     # 1 2 3

2.4.2. Keyword-only parameters

  • All parameters after * must be keyword-only

def echo(a, *, b, c=3):
    print(a, b, c)

echo(1, 2)              # TypeError: echo() takes 1 positional argument but 2 were given
echo(1, b=2)            # 1 2 3
echo(1, c=3)            # TypeError: echo() missing 1 required keyword-only argument: 'b'
echo(1, 2, 3)           # TypeError: echo() takes 1 positional argument but 3 were given
echo(1, 2, c=3)         # TypeError: echo() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given
echo(1, b=2, c=3)       # 1 2 3
echo(a=1, b=2, c=3)     # 1 2 3

2.4.3. Positional-only parameters

New in version Python: 3.8 See PEP 570 Python Positional-Only Parameters

  • All parameters before / must be positional-only

def echo(a, /, b, c=3):
    print(a, b, c)

echo(1, 2)              # 1 2 3
echo(1, b=2)            # 1 2 3
echo(1, c=3)            # TypeError: echo() missing 1 required positional argument: 'b'
echo(1, 2, 3)           # 1 2 3
echo(1, 2, c=3)         # 1 2 3
echo(1, b=2, c=3)       # 1 2 3
echo(a=1, b=2, c=3)     # TypeError: echo() got some positional-only arguments passed as keyword arguments: 'a'

2.4.4. Positional and Keyword parameters

def echo(a, /, b, *, c=3):
    print(a, b, c)

echo(1, 2)              # 1 2 3
echo(1, b=2)            # 1 2 3
echo(1, c=3)            # TypeError: echo() missing 1 required positional argument: 'b'
echo(1, 2, 3)           # TypeError: echo() takes 2 positional arguments but 3 were given
echo(1, 2, c=3)         # 1 2 3
echo(1, b=2, c=3)       # 1 2 3
echo(a=1, b=2, c=3)     # TypeError: echo() got some positional-only arguments passed as keyword arguments: 'a'

2.4.5. Examples

def pow(x, y, z=None, /):
    ...
def quantiles(dist, /, *, n=4, method='exclusive')
    ...
def add(a, b, /, **kwargs):
   ...

2.4.6. Assignments

2.4.6.1. Function Parameter Syntax Args

Note

This assignment will work only in Python 3.8+

English
  1. Create function take_damage

  2. Function takes one argument dmg

  3. Argument must be passed only as positional

  4. Function does nothing

  5. Test function by running with positional arguments

  6. Test function by running with keyword arguments

Polish
  1. Stwórz funckję take_damage

  2. Funkcja przyjmuje jeden argument dmg

  3. Argument można podawać tylko pozycyjnie

  4. Funkcja nic nie robi

  5. Przetestuj funkcję uruchamiając z pozycyjnymi parametrami

  6. Przetestuj funkcję uruchamiając z nazwanymi parametrami

2.4.6.2. Function Parameter Syntax Kwargs

English
  1. Create function set_position

  2. Function takes two arguments x and y

  3. Arguments must be passed only as keywords

  4. Function does nothing

  5. Test function by running with keyword arguments

  6. Test function by running with positional arguments

Polish
  1. Stwórz funckję set_position

  2. Funkcja przyjmuje dwa argumenty x i y

  3. Argumenty można podawać tylko nazwanie (keyword)

  4. Funkcja nic nie robi

  5. Przetestuj funkcję uruchamiając z nazwanymi parametrami

  6. Przetestuj funkcję uruchamiając z pozycyjnymi parametrami