← Все вопросы
Как передать готовый список как отдельные аргументы функции через звёздочку?
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).
Ваш ответ
Войдите, чтобы ответить на вопрос.