Распаковка args/kwargs и сортировка элементов словаря в Python

Распаковка args/kwargs и сортировка элементов словаря в Python

@python_quiz

Разберем этот квиз

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

Исходный код

python

Пошаговый разбор

  1. Позиционные аргументы и распаковка

- Выражение *(1, 2) распаковывает кортеж как два позиционных аргумента: 1, 2.
- Выражение *[3, 4] добавляет ещё два позиционных аргумента: 3, 4.
- Таким образом в вызове функции передаются позиционные аргументы в порядке: 1, 2, 3, 4.
- Функция объявлена как def f(a, *b, **c):. Первый позиционный аргумент попадёт в a (a = 1), остальные позиционные собираются в кортеж b (b = (2, 3, 4)).
- Следствие: len(b) равно 3.

  1. Именованные аргументы и распаковка словарей

- Два распакованных словаря: **{'x': 10} и **dict(y=20) дают именованные аргументы x=10 и y=20.
- Они объединяются в один словарь c = {'x': 10, 'y': 20}.
- Если бы ключи повторялись, значение из последней распаковки перекрыло бы предыдущее (поведение как при обычном обновлении словаря).

  1. Вывод и сортировка

- Функция печатает два значения: len(b) и sorted(c.items()).
- sorted(c.items()) возвращает список кортежей (ключ, значение), отсортированный по ключам (по умолчанию — лексикографически).
- В данном случае ключи 'x' и 'y' сортируются как 'x' < 'y', поэтому результат — [('x', 10), ('y', 20)].
- Печать выполнится в одну строку с пробелом между элементами (поведение print для многокомпонентного вывода).

Итого программа выведет:

text

Анализ вариантов ответов (кратко)

  • Вариант с выводом "3 [('x', 10), ('y', 20)]" совпадает с реальным выводом программы.
  • Варианты с длиной 4 ошибочны: всего три дополнительных позиционных аргумента попадают в b.
  • Варианты, где порядок пар в списке обратный, неверны из‑за сортировки по ключам: sorted гарантирует упорядочивание по ключу, поэтому порядок определяется алфавитом ключей.

Дополнительные примеры и тонкости

  1. Порядок объединения kwargs (перезапись ключей)
python
  1. Что если убрать сортировку
python
  1. Эксперимент с повторяющимися позиционными распаковками
python

Вывод

Комбинация распаковок позиционных и именованных аргументов даёт гибкий способ передачи аргументов в функцию. Важно помнить, как распределяются аргументы по параметрам (первый позиционный — в a, остальные в *b) и что распаковки словарей объединяются по ключам с перезаписью при совпадениях. Для предсказуемого порядка пар из kwargs используйте сортировку или явно контролируйте порядок ключей.

Report Page