Найти тему
Удалёнка

Python *args and **kwargs

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

Что такое *args?

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

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

def sum(a, b):

print("Сумма равна", a+b)

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

def sum(*args):

s = 0

for i in args:

s += i

print("sum is", s)

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

>>> sum(1, 2, 3)

6

>>> sum(1, 2, 3, 4, 5, 7)

22

>>> sum(1, 2, 3, 4, 5, 7, 8, 9, 10)

49

>>> sum()

0

Внимание:

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

Например:

*myargs можно использовать совершенно спокойно.

Что такое **kwargs?

**kwargs позволяет нам передавать переменное число именованных аргументов, как тут: func_name(name=’tim’, team=’school’)

def my_func(**kwargs):

for i, j in kwargs.items():

print(i, j)

my_func(name='Иннокентий', sport='баскетбол', roll=19)

Ожидаемый вывод:

sport баскетбол

roll 19

name Иннокентий

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

Вы можете использовать *args для передачи элементов из итерируемой переменной в функцию. Следующий пример прояснит все.

def my_three(a, b, c):

print(a, b, c)

a = [1,2,3]

my_three(*a) # этот список разделяется на три элемента

Внимание:

Это работает только тогда, когда количество аргументов совпадает с количеством элементов в итерируемой переменной.

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

def my_three(a, b, c):

print(a, b, c)

a = {'a': "one", 'b': "two", 'c': "three" }

my_three(**a)

Обратите внимание, что для этого необходимо 2 вещи:

Имена аргументов в функции должны совпадать с именами ключей в словаре.

Количество аргументов должно совпадать с количеством ключей в словаре.