Кортеж, распаковывающий: фиктивная переменная по сравнению с индексом

Что обычный/самый ясный путь состоит в том, чтобы записать этому в Python?

value, _ = func_returning_a_tuple()

или:

value = func_returning_a_tuple()[0]
12
задан Peter Graham 6 April 2010 в 05:24
поделиться

3 ответа

value = func_returning_a_tuple () [0] кажется более ясным и также может быть обобщено.

Что, если функция возвращала кортеж с более чем двумя значениями?
Что, если логика программы интересуется 4-м элементом бесчисленного кортежа?
Что если размер возвращаемого кортежа меняется?

Ни один из этих вопросов не влияет на идиому, основанную на субскриптах, но влияет в случае идиомы с множественным присваиванием.

10
ответ дан 2 December 2019 в 05:40
поделиться

Для извлечения отдельного элемента индексация немного более идиоматична. Когда вы извлекаете два или более элемента, распаковка становится более идиоматической. Это просто эмпирическое наблюдение с моей стороны; Я не знаю каких-либо руководств по стилю, рекомендующих или предписывающих какой-либо выбор! -)

6
ответ дан 2 December 2019 в 05:40
поделиться

Если вы оцените удобный способ сделать это в python3.x, ознакомьтесь с предложением по расширению Python (PEP) 3132 на этой странице Что нового в Python:

Расширенная итеративная распаковка . Теперь вы можете писать такие вещи, как a, b, * rest = some_sequence . И даже * rest, a = stuff . Остальной объект всегда является (возможно, пустым) списком; правая часть может быть любой итеративной. Пример:

(a, * rest, b) = range (5)

Это устанавливает a в 0 , b в 4 и отдыхают с до [1, 2, 3] .

9
ответ дан 2 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: