Расширенная распаковка кортежей в Python 2

Процесс, в котором ресурсе памяти выделяются и не правильно выпускаются когда-то больше не требуемые, часто представлял через плохие методы кодирования.

Там создаются способами на некоторых языках, чтобы помочь предотвратить их, хотя лучший способ избежать их посредством прилежного наблюдения за путями выполнения кода и обзорами кода. Хранение коротких методов и особенно ставило целью, помогает сохранить использование ресурсов плотно ограниченным по объему и менее склонным, чтобы потеряться в перестановке, также.

29
задан Neil G 17 March 2011 в 01:05
поделиться

2 ответа

Вы не можете сделать это напрямую, но не так уж сложно написать вспомогательную функцию для этого:

>>> def unpack_list(a, b, c, *d):
...   return a, b, c, d
... 
>>> unpack_list(*range(100))
(0, 1, 2, (3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99))

Вы можете применить ее к своему циклу for следующим образом:

for sub_list in mylist:
    a, b, c, d = unpack_list(*sub_list)
22
ответ дан 28 November 2019 в 01:42
поделиться

Вы можете написать очень простую функцию, которая имеет те же функции, что и расширенная распаковка python3. Слегка многословно для разборчивости. Обратите внимание, что «rest» - это позиция, где будет звездочка (начиная с первой позиции 1, а не 0)

def extended_unpack(seq, n=3, rest=3):
    res = []; cur = 0
    lrest = len(seq) - (n - 1)    # length of 'rest' of sequence
    while (cur < len(seq)):
        if (cur != rest):         # if I am not where I should leave the rest
            res.append(seq[cur])  # append current element to result
        else:                     # if I need to leave the rest
            res.append(seq[cur : lrest + cur]) # leave the rest
            cur = cur + lrest - 1 # current index movded to include rest
        cur = cur + 1             # update current position
     return(res)
0
ответ дан 28 November 2019 в 01:42
поделиться
Другие вопросы по тегам:

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