*Memo:
- My post explains the unpacking with a
for
statement (1). - My post explains the unpacking with a
for
statement (2). - My post explains the unpacking with an assignment statement (1).
- My post explains the unpacking with an assignment statement (2).
- My post explains the iterable unpacking with
*
and a function (1). - My post explains the iterable unpacking with
*
and a function (2). - My post explains the iterable unpacking with
*
and a function (3). - My post explains the dictionary unpacking with
**
and a function. - My post explains
*args
. - My post explains
**kwargs
.
Iterable and dictionary unpacking can be done with *
and **
respectively and with a for
statement as shown below:
for *v1, v2, v3 in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: print(v1, v2, v3) print(*v1, v2, v3) # [0, 1, 2, 3] 4 5 # 0 1 2 3 4 5 # [6, 7, 8, 9] 10 11 # 6 7 8 9 10 11 for v1, v2, *v3 in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: print(v1, v2, v3) print(v1, v2, *v3) # 0 1 [2, 3, 4, 5] # 0 1 2 3 4 5 # 6 7 [8, 9, 10, 11] # 6 7 8 9 10 11 for v1, *v2, v3 in [[0, 1], [2, 3]]: print(v1, v2, v3) print(v1, *v2, v3) # 0 [] 1 # 0 Nothing 1 # 2 [] 3 # 2 Nothing 3 for *v1, v2, v3 in [[0, 1], [2, 3]]: print(v1, v2, v3) print(*v1, v2, v3) # [] 0 1 # Nothing 0 1 # [] 2 3 # Nothing 2 3 for v1, v2, *v3 in [[0, 1], [2, 3]]: print(v1, v2, v3) print(v1, v2, *v3) # 0 1 [] # 0 1 Nothing # 2 3 [] # 2 3 Nothing for v1, *v2, v3 in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: # for (v1, *v2, v3) in [[0, 1, 2, 3, 4, 5], # [6, 7, 8, 9, 10, 11]]: # for [v1, *v2, v3] in [[0, 1, 2, 3, 4, 5], # [6, 7, 8, 9, 10, 11]]: print(v1, v2, v3) print(v1, *v2, v3) # 0 [1, 2, 3, 4] 5 # 0 1 2 3 4 5 # 6 [7, 8, 9, 10] 11 # 6 7 8 9 10 11 for v1, *v2, v3 in [[[0, 1], 2, [3, 4, [5]]], [[6, 7], 8, [9, 10, [11]]]]: # for (v1, *v2, v3) in [[[0, 1], 2, [3, 4, [5]]], # [[6, 7], 8, [9, 10, [11]]]]: # for [v1, *v2, v3] in [[[0, 1], 2, [3, 4, [5]]], # [[6, 7], 8, [9, 10, [11]]]]: print(v1, v2, v3) x1, x2, x3 = v3 print(*v1, *v2, x1, x2, *x3) # [0, 1] [2] [3, 4, [5]] # 0 1 2 3 4 5 # [6, 7] [8] [9, 10, [11]] # 6 7 8 9 10 11 for (*v1, v2), *v3, (v4, *v5, (*v6,)) in [[[0, 1], 2, [3, 4, [5]]], [[6, 7], 8, [9, 10, [11]]]]: # for ((*v1, v2), *v3, (v4, *v5, (*v6,))) in [[[0, 1], 2, [3, 4, [5]]], # [[6, 7], 8, [9, 10, [11]]]]: # for [[*v1, v2], *v3, [v4, *v5, [*v6]]] in [[[0, 1], 2, [3, 4, [5]]], # [[6, 7], 8, [9, 10, [11]]]]: print(v1, v2, v3, v4, v5, v6) print(*v1, v2, *v3, v4, *v5, *v6) # [0] 1 [2] 3 [4] [5] # 0 1 2 3 4 5 # [6] 7 [8] 9 [10] [11] # 6 7 8 9 10 11 for (*(v1,), v2), *(v3,), (v4, *(v5,), (*(v6,),)) in [[[0, 1], 2, [3, 4, [5]]], [[6, 7], 8, [9, 10, [11]]]]: # for ((*(v1,), v2), *(v3,), (v4, *(v5,), (*(v6,),))) in [[[0, 1], 2, # [3, 4, [5]]], # [[6, 7], 8, # [9, 10, [11]]]]: # for [[*[v1], v2], *[v3], [v4, *[v5], [*[v6]]]] in [[[0, 1], 2, # [3, 4, [5]]], # [[6, 7], 8, # [9, 10, [11]]]]: print(v1, v2, v3, v4, v5, v6) # 0 1 2 3 4 5 # 6 7 8 9 10 11 for *v, in [[0], [1]]: # for (*v,) in [[0], # [1]]: # for [*v] in [[0], # [1]]: print(v) print(*v) # [0] # 0 # [1] # 1 for *(v,), in [[0], [1]]: # for (*(v,),) in [[0], # [1]]: # for [*[v]] in [[0], # [1]]: print(v) # 0 # 1 for v1, *v2, v3 in [[0], [1]]: # for *v1, v2, v3 in [[0], # [1]]: # for v1, v2, *v3 in [[0], # [1]]: pass # ValueError: not enough values to unpack (expected at least 2, got 1) for *v1, *v2, v3 in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: pass # SyntaxError: multiple starred expressions in assignment for *v in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: pass # SyntaxError: starred assignment target must be in a list or tuple # list(*list) for v1, *v2, v3 in [*[0, 1, 2, 3, 4, 5], *[6, 7, 8, 9, 10, 11]]: pass # tuple(*tuple) for v1, *v2, v3 in (*(0, 1, 2, 3, 4, 5), *(6, 7, 8, 9, 10, 11)): pass # set(*frozenset) for v1, *v2, v3 in {*frozenset({0, 1, 2, 3, 4, 5}), *frozenset({6, 7, 8, 9, 10, 11})}: pass # frozenset(*frozenset) for v1, *v2, v3 in frozenset({*frozenset({0, 1, 2, 3, 4, 5}), *frozenset({6, 7, 8, 9, 10, 11})}): pass # list(*dict) for v1, *v2, v3 in [*{0:1, 2:3, 4:5, 6:7, 8:9, 10:11}, *{12:13, 14:15, 16:17, 18:19, 20:21, 22:23}]: pass # list(*dict.keys()) for v1, *v2, v3 in [*{0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.keys(), *{12:13, 14:15, 16:17, 18:19,20:21,22:23}.keys()]: pass # list(*dict.values()) for v1, *v2, v3 in [*{0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.values(), *{12:13, 14:15, 16:17, 18:19, 20:21, 22:23}.values()]: pass # iterator(*iterator) for v1, *v2, v3 in iter([*iter([0, 1, 2, 3, 4, 5]), *iter([6, 7, 8, 9, 10, 11])]): pass # list(*bytes) for v1, *v2, v3 in [*b'012345', *b'6789AB']: pass # list(*bytearray) for v1, *v2, v3 in [*bytearray(b'012345'), *bytearray(b'6789AB')]: pass # list(*range) for v1, *v2, v3 in [*range(6), *range(6, 12)]: pass # TypeError: cannot unpack non-iterable int object for v1, *v2, v3 in *[[0, 1, 2, 3, 4, 5], # list [6, 7, 8, 9, 10, 11]]: pass for v1, *v2, v3 in *((0, 1, 2, 3, 4, 5), # tuple (6, 7, 8, 9, 10, 11)): pass for v1, *v2, v3 in *{frozenset({0, 1, 2, 3, 4, 5}), # set frozenset({6, 7, 8, 9, 10, 11})}: pass for v1, *v2, v3 in *frozenset({frozenset({0, 1, 2, 3, 4, 5}), # frozenset frozenset({6, 7, 8, 9, 10, 11})}): pass for v1, *v2, v3 in *{'012345':'6789AB', # dict 'CDEFGH':'IJKLMN'}: pass for v1, *v2, v3 in *{'012345':'6789AB', # dict.keys() 'CDEFGH':'IJKLMN'}.keys(): pass for v1, *v2, v3 in *{'012345':'6789AB', # dict.values() 'CDEFGH':'IJKLMN'}.values(): pass for v1, *v2, v3 in *{'012345':'6789AB', # dict.items() 'CDEFGH':'IJKLMN'}.items(): pass for v1, *v2, v3 in *iter([iter([0, 1, 2, 3, 4, 5]), # iterator iter([6, 7, 8, 9, 10, 11])]): pass for *v1, in *'012345': pass # str # SyntaxError: can't use starred expression here for v1, *v2, v3 in [{'A':'B', *[0, 1, 2], 'C':'D'}, # list {'E':'F', *[3, 4, 5], 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *(0, 1, 2), 'C':'D'}, # tuple {'E':'F', *(3, 4, 5), 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *{0, 1, 2}, 'C':'D'}, # set {'E':'F', *{3, 4, 5}, 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *frozenset({0, 1, 2}), 'C':'D'}, # frozenset {'E':'F', *frozenset([3, 4, 5]), 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *{0:1, 2:3}, 'C':'D'}, # dict {'E':'F', *{4:5, 6:7}, 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *{0:1, 2:3}.keys(), 'C':'D'}, # dict.keys() {'E':'F', *{4:5, 6:7}.keys(), 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *{0:1, 2:3}.values() 'C':'D'}, # dict.values() {'E':'F', *{4:5, 6:7}.values(), 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *{0:1, 2:3}.items(), 'C':'D'}, # dict.items() {'E':'F', *{4:5, 6:7}.items(), 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *iter([0, 1, 2]), 'C':'D'}, # iterator {'E':'F', *iter([3, 4, 5]), 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *'012', 'C':'D'}, # str {'E':'F', *'345', 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *b'012', 'C':'D'}, # bytes {'E':'F', *b'345', 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *bytearray(b'012'), 'C':'D'}, # bytearray {'E':'F', *bytearray(b'345'), 'G':'H'}]: pass for v1, *v2, v3 in [{'A':'B', *range(3), 'C':'D'}, # range {'E':'F', *range(3, 6), 'G':'H'}]: pass # SyntaxError: invalid syntax for v1, **v2, v3 in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: pass for (v1, **v2, v3) in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: pass for [v1, **v2, v3] in [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]: pass # SyntaxError: invalid syntax for v1, *v2, v3 in **[[0, 1, 2, 3, 4, 5], # list [6, 7, 8, 9, 10, 11]]: pass for v1, *v2, v3 in **((0, 1, 2, 3, 4, 5), # tuple (6, 7, 8, 9, 10, 11)): pass for v1, *v2, v3 in **{frozenset({0, 1, 2, 3, 4, 5}), # set frozenset({6, 7, 8, 9, 10, 11})}: pass for v1, *v2, v3 in **frozenset({frozenset({0, 1, 2, 3, 4, 5}), # frozenset frozenset({6, 7, 8, 9, 10, 11})}): pass for v1, *v2, v3 in **{'012345':'6789AB', # dict 'CDEFGH':'IJKLMN'}: pass for v1, *v2, v3 in **{'012345':'6789AB', # dict.keys() 'CDEFGH':'IJKLMN'}.keys(): pass for v1, *v2, v3 in **{'012345':'6789AB', # dict.values() 'CDEFGH':'IJKLMN'}.values(): pass for v1, *v2, v3 in **{'012345':'6789AB', # dict.items() 'CDEFGH':'IJKLMN'}.items(): pass for v1, *v2, v3 in **iter([iter([0, 1, 2, 3, 4, 5]), # iterator iter([6, 7, 8, 9, 10, 11])]): pass for *v1, in **'012345': pass # str # SyntaxError: invalid syntax
Top comments (0)