У Питхон-у, елементи тупле или листе могу се проширити и доделити више променљивих. Ово се зове распакивање секвенце или додељивање распакивања.
Овде су описани следећи детаљи.
- Распакивање основа торки и листа
- Угнежђене торке, распаковане листе
- Распакивање помоћу доњих црта:
_
- Распакивање са звездицама:
*
Погледајте следећи чланак за информације о коришћењу звездица за проширење и прослеђивање торки, листа и речника као аргумената функције.
Распакивање основа торки и листа
Када су променљиве написане на левој страни, одвојене зарезима, свакој променљивој се додељује елемент тупле или листе на десној страни. Исто је и за торке и за листе (следећи примери су написани у облику торки).
t = (0, 1, 2)
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# 2
l = [0, 1, 2]
a, b, c = l
print(a)
print(b)
print(c)
# 0
# 1
# 2
Имајте на уму да, пошто торке могу изоставити округле заграде, ово се може користити за додељивање више вредности вишеструким променљивим у једном реду на следећи начин.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
Ако се број променљивих не поклапа са бројем елемената, долази до грешке.
# a, b = t
# ValueError: too many values to unpack (expected 2)
# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)
Ако је број променљивих мањи од броја елемената, преостали елементи се могу доделити као листа додавањем звездице имену променљиве (погледајте доле).
Угнежђене торке, распаковане листе
Угнежђене тупле и листе се такође могу распаковати. Ако желите да распакујете и садржај, приложите променљиву у нешто од следећег
()
[]
t = (0, 1, (2, 3, 4))
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)
print(type(c))
# <class 'tuple'>
a, b, (c, d, e) = t
print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4
Отпакован са _подвлаком_.
У Питхон-у, не само распаковане, вредности које нису потребне се конвенционално додељују доњој црти (подвлаци) _. Нема посебног граматичког значења; једноставно се додељују променљивој под називом _.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
Распакивање са звездицама
Ако је број променљивих мањи од броја елемената, звездица у имену променљиве ће довести до тога да елементи буду додељени заједно као листа.
Ова синтакса је имплементирана од Питхон-а 3 и није доступна у Питхон-у 2.
Елементи се додељују од почетка и краја променљивим без звездица, а преостали елементи се додељују као листа променљивим са звездицама.
t = (0, 1, 2, 3, 4)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]
print(type(c))
# <class 'list'>
a, *b, c = t
print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4
*a, b, c = t
print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4
На пример, ако желите да променљивој доделите само прва два елемента тупле или листе, можете користити горњу доњу црту за делове који нису потребни.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
Исто се може написати и на следећи начин
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
Може се прикачити само једна звездица. Ако постоји више променљивих означених звездицом, доћи ће до грешке СинтакЕррор јер није могуће утврдити колико елемената је додељено свакој променљивој.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
Имајте на уму да се чак и један елемент који је додељен променљивој означеној звездицом додељује као листа.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
Ако нема додатних елемената, додељује се празна листа.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []