← Все вопросы

Как передать готовый список как отдельные аргументы функции через звёздочку?

Задан 12 месяцев назад488 просмотров2 ответа
11

У меня есть функция, которая принимает три аргумента:

def rect(x, y, w):
    return x, y, w

data = [1, 2, 3]
rect(data)  # TypeError: missing 2 required positional arguments

Я хочу, чтобы элементы списка подставились как x, y, w. Перечислять rect(data[0], data[1], data[2]) некрасиво. Как правильно?

2 ответа

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

Распакуй список звёздочкой при вызове:

rect(*data)  # то же, что rect(1, 2, 3)

* перед итерируемым объектом раскладывает его элементы по позиционным аргументам. Для словаря по тому же принципу есть **: rect(**{'x': 1, 'y': 2, 'w': 3}) подставит по именам. Главное, чтобы длина списка совпадала с числом параметров, иначе снова получишь TypeError.

Никита Лазарёнок Звёздочка при вызове и звёздочка в определении — разные вещи, не путать · 11 месяцев назад
jen skor Для словаря именно **, спасибо · 11 месяцев назад
6

rect(*data).

Ваш ответ

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