← Все вопросы

Что такое *args и **kwargs в Python простыми словами?

Задан 4 месяца назад1.4к просмотров4 ответа
21

Постоянно вижу в чужом коде функции вида def f(*args, **kwargs):. Что это за звёздочки и зачем они? Объясните, пожалуйста, на простом примере.

4 ответа

34
✓ Принятый ответ — помог автору

Коротко:

  • *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 — это просто соглашение, важны именно звёздочки * и **.

Хайрутин Штанчаев вот теперь дошло, спасибо 🙏 · 4 месяца назад
Ксения Ковалёва а можно их вместе использовать? def f(*args, **kwargs) · 4 месяца назад
Кирилл Андервуд автор коммента: да, можно, сначала *args, потом **kwargs · 4 месяца назад
11

Запомнить просто: одна звёздочка — список аргументов без имён, две звёздочки — словарь аргументов с именами.

4

Кортеж и словарь.

0

*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)

args: (1, 2, 3) ← кортеж

kwargs: {'name': 'Alice', 'age': 25} ← словарь

Ваш ответ

Войдите, чтобы ответить на вопрос.