* Args и ** Kwargs - это некоторые из ключевых концепций Python, которые после изучения сделают вашу жизнь проще по мере вашего перехода от новичка к программисту Python среднего / продвинутого уровня. Эта статья служит учебным пособием, в котором для демонстрации используются фрагменты кода.

Проще говоря, функциональность * Args и ** Kwargs резюмируется как -

* Args и ** Kwargs позволяют программисту Python определять функции, которые могут принимать переменное количество аргументов.

Не бойся !! если вы не совсем понимаете важность приведенного выше утверждения. Эта статья как раз предназначена для того, чтобы помочь читателю понять, как * Args и ** Kwargs могут быть полезны при определении функций в Python.

* Args - это аббревиатура аргументов, то есть значений, принимаемых параметрами функции. На рисунке №1 функция maximum_2 выполняет задачу определения максимального значения между двумя параметрами ‘a’ и ‘b’. Значения a = 100 и b = 400 являются аргументами функции.

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

На рис. 2 функция maximum_l определена с использованием того же подхода. Максимальное значение инициализируется первым элементом списка (вы можете инициализировать любым элементом из списка). Позже цикл for используется для сравнения элементов списка и определения максимума.

Вышеупомянутый подход даст нам правильный ответ, но в нем все еще есть некоторые проблемы. Например - заранее подготовить список аргументов неудобно. Иногда, когда коды выполняются в реальном времени, подготовка списка аргументов может оказаться невозможной. Также программисты могут столкнуться с ситуацией, когда они не знают, сколько аргументов нужно передать для определения функции. * Args и ** Kwargs используются для решения этих проблем.

Может быть, есть доля правды в пословице: "Что в названии?" Утверждения Python * Args и ** Kwargs согласятся, потому что имена Args и Kwargs не имеют значения, это действительно просто имя. Программист может использовать любое желаемое имя, что действительно важно, так это использование операторов распаковки * и **.

Оператор * распаковки:

  • Позволит передать функции неопределенное количество аргументов.
  • Будет работать со списками для распаковки элементов, элементы сохраняются как тип данных - кортеж, который является итерируемым объектом.
  • Может использоваться для распаковки и объединения двух списков, см. Рисунок №3.

Давайте узнаем максимальное значение среди множества параметров, используя * оператор распаковки. Чтобы продемонстрировать, что имя Args действительно неуместно, мы будем использовать имя Argh !! чтобы определить функцию maximum на рисунке №4,

Случай 1 и случай 2 демонстрируют сценарий, в котором несколько аргументов различной длины 3 и 5 соответственно передаются для определения максимума.
Случай 3 говорит нам, что даже список может быть передан в качестве входных данных в функцию, но Список необходимо распаковать с помощью оператора *.

** Kwargs - это сокращение от ключевых слов аргументы. Он работает точно так же, как * Args, но вместо того, чтобы принимать переменное количество позиционных аргументов, он принимает переменное количество ключевых слов или именованных аргументов.

** Оператор распаковки:

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

На рисунке №5 представлены три случая / примера, демонстрирующие функциональность оператора ** Unpacking.

Случай 1 - Когда оператор * распаковки используется в словаре, выходные данные содержат только ключи из пары ключ-значение.
Случай 2 - Когда ** оператор распаковки используется в словаре, выходные данные содержат ключ- пары значений. Вывод должен быть сохранен в словаре, чтобы избежать ошибки TypeError.
Случай 3. Два словаря объединяются вместе путем распаковки пар ключ-значение из двух словарей.

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

На рис. 6 функция maximum_kwarg используется для определения максимального значения среди аргументов ключевого слова. Функция создает список значений, выбирая значения из аргументов ключевого слова или словаря. Этот шаг выполняется с помощью метода dictionary_name.values ​​(). Позже максимальное значение в списке значений определяется с использованием той же логики, которая использовалась в функции maximum (рисунок 4) ,, используемой для демонстрации * Args.

Случай 1 и Случай 2 демонстрируют сценарий, в котором несколько аргументов ключевого слова различной длины 3 и 5 соответственно передаются для определения максимума.
Случай 3 говорит нам, что даже словарь может быть передан в качестве входных данных функции но пары ключ-значение из словаря необходимо распаковать с помощью оператора **.

Рисунок №6 завершает нашу демонстрацию * Args и ** Kwargs. Читатель должен уметь определять функции Python, не заботясь о предыдущем обнаружении или назначении аргументов. Функциональность передачи переменного числа аргументов или аргументов ключевого слова в функцию особенно удобна при работе с декораторами и классом Python. Следующая статья будет учебником по декораторам, в котором будут использоваться концепции * Args и ** Kwargs.

Надеюсь, эта статья была полезной. Ваш отзыв очень важен.

Спасибо !!