*args и **kwargs позволяют функции принимать переменное число аргументов: *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 — дополнительные именованные аргументы в словарь. Это удобно, когда заранее неизвестно, сколько параметров придёт в функцию или когда нужно прозрачно прокинуть аргументы дальше.
Оцени свой прогресс