Можно ли распаковать кортеж в Python без создания нежелательных переменных? - PullRequest
32 голосов
/ 27 сентября 2010

Есть ли способ написать следующую функцию, чтобы моя IDE не жаловалась, что column - неиспользуемая переменная?

def get_selected_index(self):
    (path, column) = self._tree_view.get_cursor()
    return path[0]

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

Ответы [ 4 ]

53 голосов
/ 27 сентября 2010

В Python _ часто используется как игнорируемый заполнитель.

(path, _) = self._treeView.get_cursor()

Вы также можете избежать распаковки, так как кортеж индексируется.

def get_selected_index(self):
    return self._treeView.get_cursor()[0][0]
4 голосов
/ 27 сентября 2010

Если вас не волнует второй элемент, почему бы просто не извлечь первый:

def get_selected_index(self):
    path = self._treeView.get_cursor()[0]
    return path[0]
1 голос
/ 10 сентября 2018

Да, это возможно. Принятый ответ с соглашением _ все еще распаковывается, только в переменную-заполнитель.

Этого можно избежать с помощью itertools.islice:

from itertools import islice

values = (i for i in range(2))

res = next(islice(values, 1, None))  # 1

Это даст тот же res, как показано ниже:

_, res = values

Решение, как показано выше, работает, когда values является итеративной, не индексируемой коллекцией, такой как list или tuple.

0 голосов
/ 20 апреля 2016

это выглядит красиво, я не знаю, хорошая ли производительность.

a = (1, 2, 3, 4, 5)
x, y = a[0:2]
...