Как использовать args в Python?
Python args и kwargs: расшифровка
Введение
В конце статьи вы узнаете:
- Что на самом деле означают
*args
и**kwargs
- Как использовать
*args
и**kwargs
в определении функций - Как использовать одну звёздочку (
*
) для распаковки итерируемых объектов - Как использовать две звёздочки (
**
) для распаковки словарей
Бесплатный бонус: Нажмите здесь, чтобы получить Памятку по Python и изучить основы Python 3, такие как работа с типами данных, словарями, списками и функциями Python.
Передача нескольких аргументов в функцию
*args
и **kwargs
позволяют передавать несколько аргументов или ключевых аргументов в функцию. Рассмотрим следующий пример. Это простая функция, которая принимает два аргумента и возвращает их сумму:
Эта функция работает нормально, но она ограничена только двумя аргументами. А что, если вам нужно сложить переменное количество аргументов, где конкретное количество переданных аргументов определяется только во время выполнения? Неужели было бы здорово создать функцию, которая могла бы сложить все переданные ей целые числа, независимо от их количества?
Использование переменной args в определении функций на Python
Эта реализация работает, но при вызове этой функции вам также потребуется создать список аргументов для передачи его в неё. Это может быть неудобно, особенно если вы заранее не знаете все значения, которые должны быть в списке.
Вот где *args
могут быть действительно полезны, потому что они позволяют передавать переменное количество позиционных аргументов. Возьмем следующий пример:
В этом примере вы больше не передаете список в my_sum()
. Вместо этого, благодаря аргументу *args
, вы можете передать любое количество позиционных аргументов в эту функцию. Итерация происходит по кортежу args
, который содержит все переданные аргументы.
Использование переменной kwargs в определении функций на Python
Подобным образом, **kwargs
позволяет вам передавать переменное количество ключевых аргументов в функцию. Рассмотрим следующий пример:
В этом примере my_func()
может принимать переменное количество ключевых аргументов.
Вы можете передать любое количество ключей и их значения через именованную параметризацию в функцию. В теле функции kwargs
являются словарем, в котором ключами являются имена ключевых аргументов, а значениями - их значения.
Упорядочение аргументов в функции
Когда вы определяете функцию, порядок аргументов имеет значение. Вы должны соответствовать порядку определения аргументов во время вызова функции. В следующем примере my_func()
принимает три аргумента - arg1
, arg2
и arg3
, и должен вызываться с аргументами в правильном порядке:
Вывод:
Распаковка с помощью операторов спецификации: * & **
Python предоставляет операторы спецификации для распаковки итерируемых объектов и словарей. Эти операторы позволяют вам передавать элементы итерируемых объектов или пары ключ-значение словарей как отдельные аргументы в функции.
Распаковка итерируемых объектов с помощью оператора *
Оператор *
позволяет распаковывать элементы итерируемых объектов, таких как списки или кортежи, в отдельные аргументы функции. Рассмотрим следующий пример:
В этом примере список [1, 2, 3]
распаковывается при вызове функции my_func()
. Каждый элемент списка становится отдельным аргументом функции.
Распаковка словарей с помощью оператора **
Оператор **
позволяет распаковывать словари и передавать их пары ключ-значение как отдельные аргументы функции. Рассмотрим следующий пример:
В этом примере словарь {"arg1": 1, "arg2": 2, "arg3": 3}
распаковывается при вызове функции my_func()
. Каждая пара ключ-значение становится отдельным аргументом функции.
Заключение
Аргументы *args
и **kwargs
позволяют создавать более гибкие функции, которые могут принимать переменное количество аргументов и ключевых аргументов. Этот механизм может быть полезен, когда вам нужно работать с различными наборами данных или когда количество аргументов заранее неизвестно.
Вы также можете использовать операторы спецификации *
и **
для распаковки итерируемых объектов и словарей в отдельные аргументы функции. Это позволяет вам передавать данные в функцию более компактным и читаемым образом.
Теперь у вас есть полное представление о том, что такое args и kwargs в Python и как использовать их для создания более гибких функций. Попробуйте использовать их в своих проектах и посмотрите, как они могут упростить ваш код и сделать его более модульным и гибким.