cython

Форк
0
/
extended_unpacking_T235.pyx 
362 строки · 8.1 Кб
1
# ticket: t235
2

3
__doc__ = u"""
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]
9

10
    >>> unpack( FakeSeq(2) )
11
    (1, 2)
12
    >>> unpack_recursive( FakeSeq(4) )
13
    (1, [2, 3], 4)
14
"""
15

16
def unpack(l):
17
    """
18
    >>> unpack([1,2])
19
    (1, 2)
20
    >>> unpack('12')
21
    ('1', '2')
22
    """
23
    a, b = l
24
    return a,b
25

26
def unpack_list(list l):
27
    """
28
    >>> unpack_list([1,2])
29
    (1, 2)
30
    """
31
    a, b = l
32
    return a,b
33

34
def unpack_tuple(tuple t):
35
    """
36
    >>> unpack_tuple((1,2))
37
    (1, 2)
38
    """
39
    a, b = t
40
    return a,b
41

42
def unpack_single(l):
43
    """
44
    >>> unpack_single([1])
45
    [1]
46
    >>> unpack_single('1')
47
    ['1']
48
    """
49
    *a, = l
50
    return a
51

52
def unpack_tuple_single(tuple t):
53
    """
54
    >>> unpack_tuple_single((1,))
55
    [1]
56
    """
57
    *a, = t
58
    return a
59

60
def assign():
61
    """
62
    >>> assign()
63
    (1, [2, 3, 4], 5)
64
    """
65
    *a, b = 1,2,3,4,5
66
    assert a+[b] == [1,2,3,4,5], (a,b)
67
    a, *b = 1,2,3,4,5
68
    assert [a]+b == [1,2,3,4,5], (a,b)
69
    [a, *b, c] = 1,2,3,4,5
70
    return a,b,c
71

72
def unpack_into_list(l):
73
    """
74
    >>> unpack_into_list('123')
75
    ('1', ['2'], '3')
76
    """
77
    [*a, b] = l
78
    assert a+[b] == list(l), repr((a+[b],list(l)))
79
    [a, *b] = l
80
    assert [a]+b == list(l), repr(([a]+b,list(l)))
81
    [a, *b, c] = l
82
    return a,b,c
83

84
def unpack_into_tuple(t):
85
    """
86
    >>> unpack_into_tuple('123')
87
    ('1', ['2'], '3')
88
    """
89
    (*a, b) = t
90
    assert a+[b] == list(t), repr((a+[b],list(t)))
91
    (a, *b) = t
92
    assert [a]+b == list(t), repr(([a]+b,list(t)))
93
    (a, *b, c) = t
94
    return a,b,c
95

96
def unpack_in_loop(list_of_sequences):
97
    """
98
    >>> unpack_in_loop([(1,2), (1,2,3), (1,2,3,4)])
99
    1
100
    ([1], 2)
101
    ([1, 2], 3)
102
    ([1, 2, 3], 4)
103
    2
104
    (1, [2])
105
    (1, [2, 3])
106
    (1, [2, 3, 4])
107
    3
108
    (1, [], 2)
109
    (1, [2], 3)
110
    (1, [2, 3], 4)
111
    """
112
    print 1
113
    for *a,b in list_of_sequences:
114
        print((a,b))
115
    print 2
116
    for a,*b in list_of_sequences:
117
        print((a,b))
118
    print 3
119
    for a,*b, c in list_of_sequences:
120
        print((a,b,c))
121

122
def unpack_recursive(t):
123
    """
124
    >>> unpack_recursive((1,2,3,4))
125
    (1, [2, 3], 4)
126
    """
127
    *(a, *b), c  = t
128
    return a,b,c
129

130
def unpack_typed(t):
131
    """
132
    >>> unpack_typed((1,2))
133
    ([1], 2)
134
    """
135
    cdef list a
136
    *a, b  = t
137
    return a,b
138

139

140
def unpack_right(l):
141
    """
142
    >>> unpack_right('')
143
    Traceback (most recent call last):
144
    ValueError: need more than 0 values to unpack
145
    >>> unpack_right('1')
146
    ('1', [])
147
    >>> unpack_right([1])
148
    (1, [])
149
    >>> unpack_right('12')
150
    ('1', ['2'])
151
    >>> unpack_right([1,2])
152
    (1, [2])
153
    >>> unpack_right('123')
154
    ('1', ['2', '3'])
155
    >>> unpack_right([1,2,3])
156
    (1, [2, 3])
157
    """
158
    a, *b = l
159
    return a,b
160

161
def unpack_right_list(list l):
162
    """
163
    >>> unpack_right_list([])
164
    Traceback (most recent call last):
165
    ValueError: need more than 0 values to unpack
166
    >>> unpack_right_list([1])
167
    (1, [])
168
    >>> unpack_right_list([1,2])
169
    (1, [2])
170
    >>> unpack_right_list([1,2,3])
171
    (1, [2, 3])
172
    """
173
    a, *b = l
174
    return a,b
175

176
def unpack_right_tuple(tuple t):
177
    """
178
    >>> unpack_right_tuple(())
179
    Traceback (most recent call last):
180
    ValueError: need more than 0 values to unpack
181
    >>> unpack_right_tuple((1,))
182
    (1, [])
183
    >>> unpack_right_tuple((1,2))
184
    (1, [2])
185
    >>> unpack_right_tuple((1,2,3))
186
    (1, [2, 3])
187
    """
188
    a, *b = t
189
    return a,b
190

191

192
def unpack_left(l):
193
    """
194
    >>> unpack_left('')
195
    Traceback (most recent call last):
196
    ValueError: need more than 0 values to unpack
197
    >>> unpack_left('1')
198
    ([], '1')
199
    >>> unpack_left([1])
200
    ([], 1)
201
    >>> unpack_left('12')
202
    (['1'], '2')
203
    >>> unpack_left([1,2])
204
    ([1], 2)
205
    >>> unpack_left('123')
206
    (['1', '2'], '3')
207
    >>> unpack_left([1,2,3])
208
    ([1, 2], 3)
209
    """
210
    *a, b = l
211
    return a,b
212

213
def unpack_left_list(list l):
214
    """
215
    >>> unpack_left_list([])
216
    Traceback (most recent call last):
217
    ValueError: need more than 0 values to unpack
218
    >>> unpack_left_list([1])
219
    ([], 1)
220
    >>> unpack_left_list([1,2])
221
    ([1], 2)
222
    >>> unpack_left_list([1,2,3])
223
    ([1, 2], 3)
224
    """
225
    *a, b = l
226
    return a,b
227

228
def unpack_left_tuple(tuple t):
229
    """
230
    >>> unpack_left_tuple(())
231
    Traceback (most recent call last):
232
    ValueError: need more than 0 values to unpack
233
    >>> unpack_left_tuple((1,))
234
    ([], 1)
235
    >>> unpack_left_tuple((1,2))
236
    ([1], 2)
237
    >>> unpack_left_tuple((1,2,3))
238
    ([1, 2], 3)
239
    """
240
    *a, b = t
241
    return a,b
242

243

244
def unpack_middle(l):
245
    """
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')
262
    ('1', [], '2')
263
    >>> unpack_middle([1,2])
264
    (1, [], 2)
265
    >>> unpack_middle('123')
266
    ('1', ['2'], '3')
267
    >>> unpack_middle([1,2,3])
268
    (1, [2], 3)
269
    """
270
    a, *b, c = l
271
    return a,b,c
272

273
def unpack_middle_list(list l):
274
    """
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])
282
    (1, [], 2)
283
    >>> unpack_middle_list([1,2,3])
284
    (1, [2], 3)
285
    """
286
    a, *b, c = l
287
    return a,b,c
288

289
def unpack_middle_tuple(tuple t):
290
    """
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))
298
    (1, [], 2)
299
    >>> unpack_middle_tuple((1,2,3))
300
    (1, [2], 3)
301
    >>> a,b,c = unpack_middle(list(range(100)))
302
    >>> a, len(b), c
303
    (0, 98, 99)
304
    >>> a,b,c = unpack_middle_list(list(range(100)))
305
    >>> a, len(b), c
306
    (0, 98, 99)
307
    >>> a,b,c = unpack_middle_tuple(tuple(range(100)))
308
    >>> a, len(b), c
309
    (0, 98, 99)
310
    """
311
    a, *b, c = t
312
    return a,b,c
313

314
def unpack_many_middle(it):
315
    """
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)
322
    """
323
    a,b,c,d,e,*f,g,h,i,j = it
324
    return a,b,c,d,e,f,g,h,i,j
325

326
def unpack_many_left(it):
327
    """
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])
334
    """
335
    a,b,c,d,e,f,g,h,i,*j = it
336
    return a,b,c,d,e,f,g,h,i,j
337

338
def unpack_many_right(it):
339
    """
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)
346
    """
347
    *a,b,c,d,e,f,g,h,i,j = it
348
    return a,b,c,d,e,f,g,h,i,j
349

350
def unpack_many_right_loop(it):
351
    """
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)
358
    """
359
    cdef int i
360
    for i in range(1):
361
        *a,b,c,d,e,f,g,h,i,j = it
362
    return a,b,c,d,e,f,g,h,i,j
363

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.