4
>>> class FakeSeq(object):
5
... def __init__(self, length):
6
... self._values = list(range(1,length+1))
7
... def __getitem__(self, i):
8
... return self._values[i]
10
>>> unpack( FakeSeq(2) )
12
>>> unpack_recursive( FakeSeq(4) )
26
def unpack_list(list l):
28
>>> unpack_list([1,2])
34
def unpack_tuple(tuple t):
36
>>> unpack_tuple((1,2))
44
>>> unpack_single([1])
46
>>> unpack_single('1')
52
def unpack_tuple_single(tuple t):
54
>>> unpack_tuple_single((1,))
66
assert a+[b] == [1,2,3,4,5], (a,b)
68
assert [a]+b == [1,2,3,4,5], (a,b)
69
[a, *b, c] = 1,2,3,4,5
72
def unpack_into_list(l):
74
>>> unpack_into_list('123')
78
assert a+[b] == list(l), repr((a+[b],list(l)))
80
assert [a]+b == list(l), repr(([a]+b,list(l)))
84
def unpack_into_tuple(t):
86
>>> unpack_into_tuple('123')
90
assert a+[b] == list(t), repr((a+[b],list(t)))
92
assert [a]+b == list(t), repr(([a]+b,list(t)))
96
def unpack_in_loop(list_of_sequences):
98
>>> unpack_in_loop([(1,2), (1,2,3), (1,2,3,4)])
113
for *a,b in list_of_sequences:
116
for a,*b in list_of_sequences:
119
for a,*b, c in list_of_sequences:
122
def unpack_recursive(t):
124
>>> unpack_recursive((1,2,3,4))
132
>>> unpack_typed((1,2))
143
Traceback (most recent call last):
144
ValueError: need more than 0 values to unpack
145
>>> unpack_right('1')
147
>>> unpack_right([1])
149
>>> unpack_right('12')
151
>>> unpack_right([1,2])
153
>>> unpack_right('123')
155
>>> unpack_right([1,2,3])
161
def unpack_right_list(list l):
163
>>> unpack_right_list([])
164
Traceback (most recent call last):
165
ValueError: need more than 0 values to unpack
166
>>> unpack_right_list([1])
168
>>> unpack_right_list([1,2])
170
>>> unpack_right_list([1,2,3])
176
def unpack_right_tuple(tuple t):
178
>>> unpack_right_tuple(())
179
Traceback (most recent call last):
180
ValueError: need more than 0 values to unpack
181
>>> unpack_right_tuple((1,))
183
>>> unpack_right_tuple((1,2))
185
>>> unpack_right_tuple((1,2,3))
195
Traceback (most recent call last):
196
ValueError: need more than 0 values to unpack
201
>>> unpack_left('12')
203
>>> unpack_left([1,2])
205
>>> unpack_left('123')
207
>>> unpack_left([1,2,3])
213
def unpack_left_list(list l):
215
>>> unpack_left_list([])
216
Traceback (most recent call last):
217
ValueError: need more than 0 values to unpack
218
>>> unpack_left_list([1])
220
>>> unpack_left_list([1,2])
222
>>> unpack_left_list([1,2,3])
228
def unpack_left_tuple(tuple t):
230
>>> unpack_left_tuple(())
231
Traceback (most recent call last):
232
ValueError: need more than 0 values to unpack
233
>>> unpack_left_tuple((1,))
235
>>> unpack_left_tuple((1,2))
237
>>> unpack_left_tuple((1,2,3))
246
>>> unpack_middle('')
247
Traceback (most recent call last):
248
ValueError: need more than 0 values to unpack
249
>>> unpack_middle([])
250
Traceback (most recent call last):
251
ValueError: need more than 0 values to unpack
252
>>> unpack_middle(())
253
Traceback (most recent call last):
254
ValueError: need more than 0 values to unpack
255
>>> unpack_middle('1')
256
Traceback (most recent call last):
257
ValueError: need more than 1 value to unpack
258
>>> unpack_middle([1])
259
Traceback (most recent call last):
260
ValueError: need more than 1 value to unpack
261
>>> unpack_middle('12')
263
>>> unpack_middle([1,2])
265
>>> unpack_middle('123')
267
>>> unpack_middle([1,2,3])
273
def unpack_middle_list(list l):
275
>>> unpack_middle_list([])
276
Traceback (most recent call last):
277
ValueError: need more than 0 values to unpack
278
>>> unpack_middle_list([1])
279
Traceback (most recent call last):
280
ValueError: need more than 1 value to unpack
281
>>> unpack_middle_list([1,2])
283
>>> unpack_middle_list([1,2,3])
289
def unpack_middle_tuple(tuple t):
291
>>> unpack_middle_tuple(())
292
Traceback (most recent call last):
293
ValueError: need more than 0 values to unpack
294
>>> unpack_middle_tuple((1,))
295
Traceback (most recent call last):
296
ValueError: need more than 1 value to unpack
297
>>> unpack_middle_tuple((1,2))
299
>>> unpack_middle_tuple((1,2,3))
301
>>> a,b,c = unpack_middle(list(range(100)))
304
>>> a,b,c = unpack_middle_list(list(range(100)))
307
>>> a,b,c = unpack_middle_tuple(tuple(range(100)))
314
def unpack_many_middle(it):
316
>>> unpack_many_middle(list(range(14)))
317
(0, 1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, 12, 13)
318
>>> unpack_many_middle(tuple(range(14)))
319
(0, 1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, 12, 13)
320
>>> unpack_many_middle(iter(range(14)))
321
(0, 1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, 12, 13)
323
a,b,c,d,e,*f,g,h,i,j = it
324
return a,b,c,d,e,f,g,h,i,j
326
def unpack_many_left(it):
328
>>> unpack_many_left(list(range(14)))
329
(0, 1, 2, 3, 4, 5, 6, 7, 8, [9, 10, 11, 12, 13])
330
>>> unpack_many_left(tuple(range(14)))
331
(0, 1, 2, 3, 4, 5, 6, 7, 8, [9, 10, 11, 12, 13])
332
>>> unpack_many_left(iter(range(14)))
333
(0, 1, 2, 3, 4, 5, 6, 7, 8, [9, 10, 11, 12, 13])
335
a,b,c,d,e,f,g,h,i,*j = it
336
return a,b,c,d,e,f,g,h,i,j
338
def unpack_many_right(it):
340
>>> unpack_many_right(list(range(14)))
341
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
342
>>> unpack_many_right(tuple(range(14)))
343
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
344
>>> unpack_many_right(iter(range(14)))
345
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
347
*a,b,c,d,e,f,g,h,i,j = it
348
return a,b,c,d,e,f,g,h,i,j
350
def unpack_many_right_loop(it):
352
>>> unpack_many_right_loop(list(range(14)))
353
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
354
>>> unpack_many_right_loop(tuple(range(14)))
355
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
356
>>> unpack_many_right_loop(iter(range(14)))
357
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
361
*a,b,c,d,e,f,g,h,i,j = it
362
return a,b,c,d,e,f,g,h,i,j