← Все вопросы

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

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

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

3 ответа

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

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

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

4

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

Ваш ответ

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