ОСНОВНОЕ

WORDPRESS

Операционные системы

Базы данных

Фреймворк Bootstrap

Надо запастись либо умом, чтобы понимать, либо веревкой, чтобы повеситься (Антисфен).

Как использовать *args и ** kwargs в Python 3

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Статья опубликована: 10 мая 2017

Как использовать *args и ** kwargs в Python 3

Введение

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

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

Понимание *args

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

Давайте посмотрим на типичную функцию, которая использует два аргумента:

lets_multiply.py
 

В приведенной выше коде, мы создали функцию с x и y в качестве аргументов, а затем, когда мы вызываем функцию, необходимо использовать число, чтобы соответствовать x и y. В этом случае, мы введем целое число 5 в место x и целое число 4 в место y:

lets_multiply.py
 

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

 

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

Вывод
 

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

lets_multiply.py
Вывод
 

Таким образом, если вы подозреваете, что вам может понадобиться использовать несколько аргументов, вы можете использовать *args в качестве параметра.

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

lets_multiply.py
 

Когда мы запустим этот код, мы получим вывод для каждого из этих вызовов функций:

Вывод
 

Поскольку мы использовали *args для отправки списка аргументов переменной длины для нашей функции, мы смогли передать столько аргументов, сколько мы хотели в вызове функций.

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

Понимание ** kwargs

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

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

Во-первых, давайте просто распечатаем аргументы **kwargs, которые мы передаем в функцию. Мы создадим короткую функцию, чтобы сделать это:

print_kwargs.py
 

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

print_kwargs.py
 

Давайте запустим программу выше и посмотрим на результат:

 

Вывод
 

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

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

print_values.py
 

Теперь мы можем запустить программу и посмотреть на выходе:

 

Вывод
 

Опять же, потому что словари являются неупорядоченными, ваш выход может быть с первым именем Master или с именем AndreyEx.

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

print_values.py
 

При запуске программы в этой точке, мы получим следующий результат, который снова неупорядоченный:

Вывод
 

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

Упорядочение аргументов

При упорядочивании аргументов внутри вызова функции или функции, аргументы должны происходить в определенном порядке:

  1. Формальные позиционные аргументы
  2. *args
  3. Ключевые аргументы
  4. **kwargs

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

 

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

 

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

Использование *arg и ** kwargs в вызове функций

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

Во-первых, давайте посмотрим на примере с *args.

some_args.py
В приведенной выше функции, существует три параметра, определенные как arg_1, arg_и arg_3. Функция напечатает каждый из этих аргументов. Затем мы создаем переменную, которая устанавливается в качестве итератора (в данном случае, tuple), и может передать эту переменную в функцию с синтаксисом звездочкой.

При запуске программы с командой python some_args.py, мы получим следующий результат:

Вывод
 

Мы также можем изменить программу выше повтора типа данных списка с другим именем переменной. Давайте также объединим синтаксис *args с именем параметра:

some_args.py
 

Если запустить программу выше, она выведет следующий вывод:

Вывод
 

Аналогичным образом, аргументы **kwargs могут быть использованы для вызова функции. Мы настроим переменную равной 3 пар ключ-значение (мы будем использовать kwargs здесь, но можно назвать все, как вы хотите), и передать его в функцию с 3 – мя аргументами:

some_kwargs.py
 

Давайте запустим программу выше, с помощью команды python some_kwargs.py:

Вывод
 

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

Вывод

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

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

 


Читайте также

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close