Назад в блог

Использование параметров *args и **kwargs в вашем коде: руководство по Python 3

Использование параметров *args и **kwargs в вашем коде: руководство по Python 3

Введение

Python — один из самых популярных языков программирования в мире. В Python параметры являются частью определений функций. Они позволяют указывать определенные аргументы для функции. Аргумент может быть принят и применен функцией.

Однако во время написания кода невозможно точно знать, какие именно сценарии использования могут быть реализованы с его помощью. Поэтому ради будущих программистов и пользователей вашей программы целесообразно передавать функции переменное количество аргументов. Для этого необходимо использовать специальные параметры. Это *args и **kwargs. В этом руководстве мы подробно изучим параметры *args и **kwargs в Python. Мы также узнаем, как упорядочивать аргументы и как применять их при вызовах функций.

Предварительные требования

Чтобы иметь возможность следовать шагам этого руководства, вам необходимо подготовить некоторые предварительные требования. Во-первых, у вас должен быть установлен Python 3 на вашем сервере с настроенной и работающей средой программирования. Также вам необходимо установить программу для вашей конкретной операционной системы (Ubuntu, CentOS, Debian и т. д.).

Что такое *args и как это работает?

Давайте начнем с понимания того, как *args работает. Версия параметра с одной звездочкой используется для передачи функциям списков позиционных аргументов переменной длины (без ключевых слов). Имейте в виду, что звездочка является наиболее важным элементом в этом параметре.

Чтобы лучше понять, давайте рассмотрим пример. Ниже приведена типичная функция, которую вы можете встретить в своем коде, использующая два аргумента:

Как вы можете видеть, нашими аргументами в приведенной выше функции являются x и y. При вызове функции вы будете использовать числа, соответствующие x и y. Допустим, мы передаем целые числа 5 и 4 для x и y соответственно:

Теперь мы можем запустить код:

Мы получим следующий вывод:

Вывод показывает, что целые числа 5 и 4 были перемножены. Это означает, что функция multiply(x, y) успешно сработала.

Теперь предположим, что мы хотим перемножить три числа вместо двух. К сожалению, добавление дополнительного числа в приведенную выше функцию приведет к следующей ошибке:

Поэтому, если вы предполагаете, что позже вам может понадобиться добавить больше аргументов, используйте параметр *args для вашего удобства. Вы можете использовать его следующим образом:

Мы просто заменили параметры функции x и y на *args. Запуск этого кода даст вам произведение для каждого отдельного вызова функции следующим образом:

Таким образом, *args идеально подходит для использования, когда вы хотите передать функции списки аргументов переменной длины. Благодаря этой возможности вы можете передавать в вызовы функций столько аргументов, сколько захотите. Таким образом, этот параметр позволяет создавать более гибкий код, который может принимать в функцию большое количество переменных позиционных аргументов.

Что такое **kwargs и как это работает?

Далее у нас есть версия параметров с двойной звездочкой, а именно **kwargs. В отличие от предыдущей формы, этот параметр позволяет передавать в функцию словари именованных аргументов переменной длины. Аналогично *args, две звездочки являются наиболее важным элементом параметра.

Как и в предыдущем разделе, вы можете добавить столько аргументов, сколько захотите. Разница в том, что вы должны назначить ключевые слова. Чтобы лучше понять, рассмотрим следующий пример. Здесь мы начнем с вывода на экран **kwargs аргументов, которые мы хотим передать функции:

Теперь давайте вызовем функцию. Как видите, мы добавили именованные аргументы:

Запуск программы на данном этапе покажет следующий вывод:

Однако существует вероятность того, что ваш тип данных словаря не упорядочен. Это во многом зависит от используемой вами версии Python 3. Например, любая версия после Python 3.6 выдает пары «ключ-значение» по порядку. Любая более ранняя версия покажет вывод в случайном порядке. Создаваемый вами словарь будет называться kwargs. Обратите внимание, что вы можете использовать его и манипулировать им, как и любым другим словарем в системе. Давайте посмотрим, как вы можете использовать **kwargs параметр с большей пользой и эффективностью.

В следующем примере мы попытаемся создать новую функцию, которая будет приветствовать словарь с именами. Наш пример словаря будет содержать два имени:

Запуск программы даст следующий результат:

Как и в предыдущем примере, словари могут оказаться неупорядоченными. Таким образом, порядок имен Casey и Sammy в некоторых случаях может быть изменен.

Далее мы передадим функции дополнительные аргументы. Это докажет, что вы можете заставить **kwargs принимать любое количество аргументов, которое вы хотите:

Запуск программы покажет следующий вывод:

Этот вывод также может быть неупорядоченным. Несмотря на это, данные примеры показывают, что **kwargs дает вашей программе гибкость для использования любого количества именованных аргументов.

Как упорядочивать аргументы

Важно помнить об установленном порядке при расположении аргументов в функции или вызове функции. Он выглядит следующим образом:

  1. Формальные позиционные аргументы

  2. *args

  3. Именованные аргументы

  4. **kwargs

Допустим, вы используете *args и **kwargs с явными позиционными параметрами. Это означает, что ваша функция будет выглядеть так:

С другой стороны, использование этих параметров вместе с именованными параметрами придаст вашей функции следующую общую структуру:

Несоблюдение установленного порядка приведет к синтаксической ошибке при запуске кода. Поэтому лучше всего изначально избегать этой ошибки.

Как использовать *args и **kwargs при вызове функций

Наконец, мы покажем вам, как использовать оба параметра для передачи аргументов в функции. Мы начнем с примера, показывающего *args:

В этой функции есть три параметра: arg_1, arg_2, и arg_3. Вы должны создать переменную и присвоить ей итерируемый объект. В данном случае это будет tuple. Затем вы можете передать переменную в функцию, используя синтаксис со звездочкой.

Обратите внимание на вывод при запуске программы с помощью команды python some_args.py команды:

Также можно изменить программу для использования итерируемого списка типа данных с другим именем переменной. Следующий код объединяет *args с именованным параметром:

При запуске программы вывод будет следующим:

С другой стороны, вы можете применять именованные аргументы с **kwargs. Обязательно создайте переменную, равную словарю. Он должен содержать 2 пары «ключ-значение». Вот как мы передадим переменную в функцию с 3 аргументами:

Используйте python some_kwargs.py еще раз, чтобы запустить программу:

Заключение

К концу этого руководства вы должны хорошо разобраться в том, что такое *args и **kwargs и как они работают. Теперь вы можете применять эти параметры в своем собственном коде, чтобы сделать программу гибкой для будущих пользователей. Они идеально подходят для ситуаций, когда вы не знаете, сколько аргументов может быть использовано. Просто будьте внимательны к критически важным элементам функций и параметров.

Наконец, вот еще несколько ресурсов из нашего блога, которые помогут вам успешно работать с Python:

Приятного программирования!

author

Pranay Kapgate

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.