Есть функция def f(x, y): return x + y и словарь d = {"x": 1, "y": 2}. Что произойдёт при вызове f(**d)?

AПередаст словарь d целиком как один позиционный аргумент функции в неизменённом виде
BПередаст значения как именованные аргументы: эквивалентно записи f(x=1, y=2)
CПередаст ключи 'x' и 'y' как два позиционных строковых аргумента в порядке добавления
DПоднимет TypeError из-за того, что ключи словаря являются строками, а параметры функции ожидают число
Правильный ответ. Оператор ** при вызове функции распаковывает словарь в именованные аргументы: ключи становятся именами параметров.

Разбор

Запись f(**d) эквивалентна f(x=1, y=2). Ключи словаря должны совпадать с именами параметров функции и быть строками. Если в словаре есть ключ, которого нет в сигнатуре функции (и нет **kwargs), будет TypeError. Аналогично, * распаковывает список или кортеж в позиционные аргументы.

Проверь себя · 1/3разбор после ответа
Есть множество s = {"a", "b"}. Нужно удалить элемент "c", если он есть, и не получать ошибку, если его нет. Какой способ корректен?
Тренировать Python в Telegram

Ещё вопросы по теме «Коллекции и структуры данных»