Получить 2 параметра из возвращающегося fuction (кортежа) в python - PullRequest
0 голосов
/ 26 мая 2019

У меня проблемы с получением двух параметров, возвращаемых из функции в виде кортежа:

>>> ir7(41,7)

(966, 1023, 571, 396, 105, 2, 3)

Если я хочу получить указанный кортеж, я использую это:

 >>> ir7(41,7)[0]

966

но что, если я хочу получить 1-й, 3-й и 4-й элемент из кортежа? Какой правильный синтаксис? Что-то вроде:

a,b,c= ir7(41,7)[1][3][4]

Ответы [ 5 ]

1 голос
/ 26 мая 2019

Вы также можете ввести нарезку для уменьшения результата перед присвоением значений:

a, _, b, c = ir7(41, 7)[1:4]

Еще лучше вы могли бы использовать operator.itemgetter

from operator import itemgetter

a, b, c = itemgetter(1,3,4)(ir7(41, 7))
1 голос
/ 26 мая 2019

Вы можете распаковать возвращаемые значения:

_, a, _, b, c, _, _ = ir(41, 7)

_ указывает, что значение, назначаемое здесь, не важно.

1 голос
/ 26 мая 2019

Когда вы делаете ir7(41,7)[1][3][4], вы, по существу, пытаетесь получить 4-й элемент 3-го элемента 1-го элемента объекта (в основном 4-мерный список). Вместо этого вы должны получить их отдельно:

# Get all the values initially in a separate variable
values = ir7(41,7)
a, b, c = values[1], values[3], values[4]

Или я могу сделать это так:

_, a, _ b, c = ir7(41,7)

Опуская ненужные индексы с помощью переменных-заполнителей _

1 голос
/ 26 мая 2019

Существует соглашение об использовании _ в качестве имени для переменных, которые вы на самом деле не хотите использовать. Используя это, вы можете сделать:

_, a, _, b, c = ir7(41, 7)

В качестве альтернативы вы можете сделать:

value = ir7(41, 7)
a, b, c = value[1], value[3], value[4]

Если количество исключаемых элементов велико, вам определенно необходим второй вариант.

1 голос
/ 26 мая 2019

Вызовите метод только один раз, чтобы сделать его более эффективным. После этого это просто вопрос назначения кортежей.

v = ir7(41,7)
a, b, c= v[1], v[3], v[4]
...