Рубрики
Без рубрики

* args и ** Kwargs в Python

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

Автор оригинала: Pankaj Kumar.

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

* args -> Представляет Список / Кортеж позиционные аргументы, которые будут переданы на любую функцию

** kwargs -> Представляет Словарь ключевое слово . аргументы, которые будут переданы на любую функцию

Цель * args

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

Есть два случая, где * (Звезда) Оператор отличается смыслом.

Случай 1: в определении функции

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

def find_average(*args):
    total = 0
    print('Packed Argument Tuple ->', args)
    for i in args:
        total += i
    return total / len(args)


print('Average ->', find_average(1, 2, 3, 4, 5))

Выход

Packed Argument Tuple -> (1, 2, 3, 4, 5)
Average -> 3.0

Случай 2: в вызове функций

Здесь * Оператор используется для распаковки соответствующего списка/кортежа, переданного ему или даже генератору.

a = [1, 2, 3]
print(*a)

Выход

1 2 3

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

Сочетание Case1 и Case2 использовать * args

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

def compute_maximum(*args):
    maximum = 0
    for i in args:
        if i > maximum:
           maximum = i
    return maximum

a = [4, 5, 10, 14, 3]
print('Maximum ->', compute_maximum(*a))

Выход

Maximum -> 14

Цель ** кварг

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

Вот пример, чтобы проиллюстрировать цель ** kwargs.

def find_average(**kwargs):
    total = 0
    print('Keyword Argument Dictionary ->', kwargs)
    for key, value in kwargs.items():
        total += value
    return total / len(kwargs.items())


print('Average ->', find_average(first=1, second=2, third=3, fourth=4, fifth=5))

Выход

Keyword Argument Dictionary -> {'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5}
Average -> 3.0

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

>>> print(*kwargs)
first second third fourth fifth
>>> print(*kwargs.values())
1 2 3 4 5

Заключение

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

Рекомендации

Stackoverflow: https://stackoverflow.com/questions/3394835/use-of-args-and-kwargs.