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

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

Иногда заранее неизвестно, сколько аргументов понадобится функции: два, три или десять. В таких случаях удобно использовать переменное число аргументов через *args и **kwargs. На собеседовании важно показать, что ты понимаешь именно идею: сделать функцию более гибкой по количеству входных параметров.

Что такое *args

*args в определении функции означает: «Собери все дополнительные позиционные аргументы в один кортеж».

def avg(*args):
    return sum(args) / len(args)

avg(1, 2, 3)           # 2.0
avg(10, 20, 30, 40)    # 25.0

Внутри функции args — обычный кортеж. Можно комбинировать обычные параметры и *args, но обычные параметры должны идти до *args:

def log(prefix, *messages):
    for msg in messages:
        print(prefix, msg)

log("[INFO]", "start", "processing", "done")

Что такое **kwargs

**kwargs в определении функции означает: «Собери все дополнительные именованные аргументы в словарь».

def create_user(**kwargs):
    return kwargs

create_user(name="Alex", age=30, role="admin")
# {'name': 'Alex', 'age': 30, 'role': 'admin'}

Внутри функции kwargs — словарь, где ключи совпадают с именами аргументов. Частый сценарий в backend‑коде — проксировать эти аргументы дальше:

def wrapped_request(url, **options):
    options.setdefault("timeout", 5)
    return http_request(url, **options)

Совместное использование и порядок аргументов

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

def handle_request(method, url, *args, retry=3, **kwargs):
    ...

Как ответить на собеседовании

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

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге