DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Unpacking in Python (2)

Buy Me a Coffee

*Memo:

  • My post explains the unpacking with an assignment statement (1).
  • My post explains the unpacking with a for statement (1).
  • My post explains the unpacking with a for 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 dictionary unpacking with ** within a dictionary and function.
  • My post explains *args.
  • My post explains **kwargs.

Iterable and dictionary unpacking can be done with * and ** respectively and with an assignment statement as shown below:

v1, *v2, v3 = [0, 1, 2, 3, 4, 5] # list # list(*list(*list)) v1, *v2, v3 = [*[0, 1], 2, *[3, 4, *[5]]] v1, *v2, v3 = (0, 1, 2, 3, 4, 5) # tuple # tuple(*tuple(*tuple)) v1, *v2, v3 = (*(0, 1), 2, *(3, 4, *(5,))) v1, *v2, v3 = {0, 1, 2, 3, 4, 5} # set # set(*set(*set)) v1, *v2, v3 = {*{0, 1}, 2, *{3, 4, *{5,}}} v1, *v2, v3 = frozenset({0, 1, 2, 3, 4, 5}) # frozenset v1, *v2, v3 = iter([0, 1, 2, 3, 4, 5]) # iterator v1, *v2, v3 = range(6) # range  print(v1, v2, v3) # 0 [1, 2, 3, 4] 5 print(v1, *v2, v3) # 0 1 2 3 4 5  v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11} # dict # dict(**dict(**dict)) v1, *v2, v3 = {**{0:1, 2:3}, 4:5, **{6:7, 8:9, **{10:11}}} v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.keys() # dict.keys()  print(v1, v2, v3) # 0 [2, 4, 6, 8] 10 print(v1, *v2, v3) # 0 2 4 6 8 10  v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.values() # dict.values()  print(v1, v2, v3) # 1 [3, 5, 7, 9] 11 print(v1, *v2, v3) # 1 3 5 7 9 11  v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.items() # dict.items()  print(v1, v2, v3) # (0, 1) [(2, 3), (4, 5), (6, 7), (8, 9)] (10, 11) print(v1, *v2, v3) # (0, 1) (2, 3) (4, 5) (6, 7) (8, 9) (10, 11)  v1, *v2, v3 = '012345' # str  print(v1, v2, v3) # 0 ['1', '2', '3', '4'] 5 print(v1, *v2, v3) # 0 1 2 3 4 5 print(*v1, *v2, *v3) # 0 1 2 3 4 5  v1, *v2, v3 = b'012345' # bytes v1, *v2, v3 = bytearray(b'012345') # bytearray  *v1, = '0' # str *v2, = v1 *v3, = v2 print(v1, v2, v3, *v1, *v2, *v3) # ['0'] ['0'] ['0'] 0 0 0  print(v1, v2, v3) # 48 [49, 50, 51, 52] 53 print(v1, *v2, v3) # 48 49 50 51 52 53  *v1, v2, v3 = [0, 1, 2, 3, 4, 5] print(v1, v2, v3) # [0, 1, 2, 3] 4 5 print(*v1, v2, v3) # 0 1 2 3 4 5  v1, v2, *v3 = [0, 1, 2, 3, 4, 5] print(v1, v2, v3) # 0 1 [2, 3, 4, 5] print(v1, v2, *v3) # 0 1 2 3 4 5  v1, *v2, v3 = [0, 1] print(v1, v2, v3) # 0 [] 1 print(v1, *v2, v3) # 0 Nothing 1  *v1, v2, v3 = [0, 1] print(v1, v2, v3) # [] 0 1 print(*v1, v2, v3) # Nothing 0 1  v1, v2, *v3 = [0, 1] print(v1, v2, v3) # 0 1 [] print(v1, v2, *v3) # 0 1 Nothing  v1, *v2, v3 = [0, 1, 2, 3, 4, 5] (v1, *v2, v3) = [0, 1, 2, 3, 4, 5] [v1, *v2, v3] = [0, 1, 2, 3, 4, 5] print(v1, v2, v3) # 0 [1, 2, 3, 4] 5 print(v1, *v2, v3) # 0 1 2 3 4 5  v1, *v2, v3 = [[0, 1], 2, [3, 4, [5]]] (v1, *v2, v3) = [[0, 1], 2, [3, 4, [5]]] [v1, *v2, v3] = [[0, 1], 2, [3, 4, [5]]] print(v1, v2, v3) # [0, 1] [2] [3, 4, [5]] w1, w2, w3 = v3 print(*v1, *v2, w1, w2, *w3) # 0 1 2 3 4 5  (*v1, v2), *v3, (v4, *v5, (*v6,)) = [[0, 1], 2, [3, 4, [5]]] ((*v1, v2), *v3, (v4, *v5, (*v6,))) = [[0, 1], 2, [3, 4, [5]]] [[*v1, v2], *v3, [v4, *v5, [*v6]]] = [[0, 1], 2, [3, 4, [5]]] print(v1, v2, v3, v4, v5, v6) # [0] 1 [2] 3 [4] [5] print(*v1, v2, *v3, v4, *v5, *v6) # 0 1 2 3 4  (v1, v2), *(v2,), (v3, *(v4,), (*(v5,),)) = [[0, 1], 2, [3, 4, [5]]] ((v1, v2), *(v3,), (v4, *(v5,), (*(v6,),))) = [[0, 1], 2, [3, 4, [5]]] [v1, v2], *[v3], [v4, *[v5], [*[v6]]] = [[0, 1], 2, [3, 4, [5]]] print(v1, v2, v3, v4, v5) # 0 1 2 3 4  *v, = [0] (*v,) = [0] [*v] = [0] print(v) # [0] print(*v) # 0  *(v,), = [0] (*(v,),) = [0] [*[v]] = [0] print(v) # 0  v1, *v2, v3 = [0] *v1, v2, v3 = [0] v1, v2, *v3 = [0] # ValueError: not enough values to unpack (expected at least 2, got 1)  *v1, *v2, v3 = [0, 1, 2, 3, 4, 5] # SyntaxError: multiple starred expressions in assignment  *v = [0, 1, 2, 3, 4, 5] # SyntaxError: starred assignment target must be in a list or tuple  v1, v2, v3 = *[0, 1, 2, 3, 4, 5] # list v1, v2, v3 = *(0, 1, 2, 3, 4, 5) # tuple v1, v2, v3 = *{0, 1, 2, 3, 4, 5} # set v1, v2, v3 = *frozenset({0, 1, 2, 3, 4, 5}) # frozenset v1, v2, v3 = *{0:1, 2:3, 4:5, 6:7, 8:9, 10:11} # dict v1, v2, v3 = *iter([0, 1, 2, 3, 4, 5]) # iterator v1, v2, v3 = *'012345' # str v1, v2, v3 = *b'012345' # bytes v1, v2, v3 = *bytearray(b'012345') # bytearray v1, v2, v3 = *range(6) # range # SyntaxError: can't use starred expression here  v1, v2, v3 = **{0:1, 2:3, 4:5, 6:7, 8:9, 10:11} # dict # SyntaxError: invalid syntax 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)