Что такое *args и **kwargs в Python простыми словами?
Постоянно вижу в чужом коде функции вида def f(*args, **kwargs):. Что это за звёздочки и зачем они? Объясните, пожалуйста, на простом примере.
4 ответа
Коротко:
*args— собирает все «лишние» позиционные аргументы в кортеж.**kwargs— собирает все «лишние» именованные аргументы в словарь.
Это нужно, когда заранее не знаешь, сколько аргументов передадут.
def summa(*args):
return sum(args)
print(summa(1, 2, 3)) # 6
print(summa(1, 2, 3, 4)) # 10
А **kwargs ловит пары ключ=значение:
def info(**kwargs):
for k, v in kwargs.items():
print(k, '=', v)
info(name='Аня', age=20)
# name = Аня
# age = 20
Имена args и kwargs — это просто соглашение, важны именно звёздочки * и **.
Запомнить просто: одна звёздочка — список аргументов без имён, две звёздочки — словарь аргументов с именами.
Кортеж и словарь.
*args и **kwargs — это способ передать в функцию любое количество аргументов, даже если вы не знаете заранее, сколько их будет.
*args собирает позиционные аргументы в кортеж (tuple) **kwargs собирает именованные аргументы в словарь (dict)
def my_func(*args, **kwargs): print("args:", args) print("kwargs:", kwargs)
my_func(1, 2, 3, name="Alice", age=25)