Одиночная * делает все следующие параметры только именованными. Поэтому b нужно передавать как b=..., а a может быть позиционным или именованным. Оба параметра обязательны.
Только именованный аргумент b
Одиночная * делает все следующие параметры только именованными. Поэтому b нужно передавать как b=..., а a может быть позиционным или именованным. Оба параметра обязательны.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что означает символ * в определении функции?
def foo(a, *, b):
pass
Ответ
Одиночная * делает все следующие параметры только именованными. Поэтому b нужно передавать как b=..., а a может быть позиционным или именованным. Оба параметра обязательны.
Допустимые вызовы:
foo(1, b=2)
foo(a=1, b=2)
foo(1, 2) вызовет TypeError, потому что второй позиционный аргумент не разрешён. foo(1) тоже ошибочен: у b нет значения по умолчанию. Одиночная * не собирает аргументы в кортеж; для этого используют *args. Такая сигнатура делает назначение дополнительных параметров явным в месте вызова.