Найти в Дзене

*args и **kwargs в Python. Распаковка и запаковка значений

Привет! Сочетание *args и **kwargs в коде видел каждый начинающий python-разработчик, но не все понимают значение этих конструкций. В этой статье постараюсь объяснить простыми словами, как работает распаковка и запаковка значений в python. В Python можно присвоить несколько значений сразу нескольким переменным: Но как поступить, если переменных меньше, чем значений? И если мы хотим "не поместившиеся" данные объединить в список? В этом случае на помощь приходит "запаковка". Можно выбрать первый, последний и "середину": Позиционные аргументы — это аргументы, которые передаются в функцию в определенном порядке. Аргументы, которые передаются с именами, называются именованными. Пример 1. В данном примере параметр *args собирает все позиционные аргументы в кортеж. В вызове fun(1, 2, 3, a=4, b=5) числа 1, 2, 3 попадают в args. Параметр **kwargs cобирает все именованные аргументы (с указанием имени) в словарь. В вызове a=4 и b=5 попадают в kwargs. Пример 2. Когда аргументов много, их удобн
Оглавление

Привет! Сочетание *args и **kwargs в коде видел каждый начинающий python-разработчик, но не все понимают значение этих конструкций. В этой статье постараюсь объяснить простыми словами, как работает распаковка и запаковка значений в python.

Множественное присваивание в Python

В Python можно присвоить несколько значений сразу нескольким переменным:

-2

Но как поступить, если переменных меньше, чем значений? И если мы хотим "не поместившиеся" данные объединить в список? В этом случае на помощь приходит "запаковка".

-3

Можно выбрать первый, последний и "середину":

-4

Позиционные и именованные аргументы

Позиционные аргументы — это аргументы, которые передаются в функцию в определенном порядке. Аргументы, которые передаются с именами, называются именованными.

Пример 1.

-5

В данном примере параметр *args собирает все позиционные аргументы в кортеж. В вызове fun(1, 2, 3, a=4, b=5) числа 1, 2, 3 попадают в args.

Параметр **kwargs cобирает все именованные аргументы (с указанием имени) в словарь. В вызове a=4 и b=5 попадают в kwargs.

Пример 2.

Когда аргументов много, их удобно объединять в коллекции и передавать в распакованном виде.

-6

В данном примере конструкция *my_list распаковывает список my_list, а **my_dict преобразует ключи и значения словаря my_dict для передачи именованных аргументов.

Порядок передачи параметров

При работе с аргументами функций важно соблюдать правильный порядок:

  1. Обычные позиционные аргументы
  2. Аргументы с значениями по умолчанию
  3. *args для произвольного числа позиционных аргументов
  4. **kwargs для произвольного числа именованных аргументов
-7

Итоги

Механизмы *args и **kwargs делают Python-код более:

  • Гибким — можно работать с переменным числом аргументов.
  • Универсальным — одна функция может обрабатывать разные сценарии.
  • Читаемым — явное указание набора параметров.

Освоив эти концепции, вы сможете писать более выразительный и поддерживаемый код на Python.

Удачи!

Другие статьи автора