Для понимания списка / генератора с парами ключ / значение я думаю, что использование фиктивной переменной может быть довольно аккуратным, особенно когда распакованное значение необходимо использовать более одного раза (избегая повторного индексирования), например ::10000
l = [('a', 1.54), ('b', 4.34), ('c', 3.22), ('d', 6.43)]
s = [x * (1.0 - x) * (2.0 - x) for _, x in l]
против
s = [x[0] * (1.0 - x[0]) * (2.0 - x[0]) for x in l]
Еще одна вещь, которую стоит отметить, это то, что, хотя распаковка и индексация примерно такие же дорогие, как расширенная, распаковка кажется на порядок медленнее.
В Python 3.2 с использованием% timeit в IPython:
Обычная распаковка:
>>> x = (1, 2)
>>> %timeit y, _ = x
10000000 loops, best of 3: 50 ns per loop
>>> %timeit y, _ = x
10000000 loops, best of 3: 50.4 ns per loop
Расширенная распаковка:
>>> x = (1, 2, 3)
>>> %timeit y, *_ = x
1000000 loops, best of 3: 1.02 us per loop
>>> %timeit y = x[0]
10000000 loops, best of 3: 68.9 ns per loop