Именованные сущности в определениях типов, поддерживающих вызов, определяющие то, какие аргументы могут быть приняты при вызове.
Внимание
Параметры и аргументы — две разные сущности, которые не следует путать между собой.

Параметры могут использоваться для обозначения как обязательных, так и необязательных аргументов.

Когда один или более параметров имеют форму параметр=выражение, говорят, что заданы параметры по умолчанию. Для параметров по умолчанию, соответствующий ему аргумент может быть опущен при вызове и тогда будет использовано значение по умолчанию.

Внимание
Если для параметра определено значение по умолчанию, все последующие за ним параметры до * должны также иметь значения по умолчанию.

def func(a, b=None):
print(a, b)


func()
# TypeError: func() missing 1 required positional argument: 'a'

func(1) # (1, None)

Типы параметров

1. позиционный-или-именованный: используется для обозначения аргумента, который может быть передан либо как позиционный, либо как именованный. Этот тип параметра используется по умолчанию:

# Здесь a и b - позиционные-или-именованные.
def func(a, b=None):
print(a, b)


func(a=1, b=2) # (1, 2)
func(1, b=2) # (1, 2)
func(1, 2) # (1, 2)

2. только-позиционный: используется для обозначения аргумента, который может быть передан только в определённой позиции. Питон не предоставляет средств для определения параметров такого типа, однако им пользуются некоторые функции, например abs().

3. +py3.0 (PEP 3102) только-именованный: используется для обозначения аргумента, который может быть передан только с использованием его имени. Данный тип можно задать, указав единственный вариационно-позиционный параметр, либо добавив * перед нужными параметрами.

    # Здесь kw_only1 и kw_only2 - только-именованные.
def func(*args, kw_only1, kw_only2):
print(args, kw_only1, kw_only2)


func(1, 4, kw_only1=2, kw_only2=3) # (1, 4) 2 3


def func(arg, *, kw_only1, kw_only2):
print(arg, kw_only1, kw_only2)


func(1, 2, 3)
# TypeError: func() takes 1 positional argument but 3 were given

func(1, kw_only1=2, kw_only2=3) # 1 2 3

4. вариационно-позиционный: используется для обозначения какой-либо последовательности позиционных аргументов (в дополнение к тем позиционным аргументам, которые уже принимаются другими параметрами). Данный тип можно задать добавив перед именем параметра *.

# Здесь args - вариационно-позиционный.
def func(*args):
print(args)

func(a=1)
# TypeError: func() got an unexpected keyword argument 'a'

func(1, 2) # (1, 2)
func(1, 2, 3, 4) # (1, 2, 3, 4)

5. вариационно-именованный: используется для обозначения любого количества именованных аргументов (в дополнение к тем именованным аргументам, которые уже принимаются драгими параметрами). Данный тип можно задать добавив перед именем параметра **.

# Здесь kwargs - вариационно-позиционный.
def func(**kwargs):
print(kwargs)


func(0)
# TypeError: func() takes 0 positional arguments but 1 was given

func(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}

На заметку
Модуль inspect, помимо прочего, предоставляет средства для получения информации о параметрах функции, в частности inspect.Parameter.
Синонимы поиска: параметры args kwargs ключевые слова

Нет обсуждений для отображения.
Если у вас есть, что сказать, можете представиться и исправить ситуацию.