Í Python er hægt að stækka þætti í tuple eða lista og úthluta þeim á margar breytur. Þetta er kallað röð afpökkun eða unpacked assignment.
Eftirfarandi smáatriðum er lýst hér.
- Upptaka grunnatriði túlla og lista
- Hreiður túplar, ópakkaðar skráningar
- Upptaka með undirstrikunum:
_
- Að pakka niður með stjörnum:
*
Sjá eftirfarandi grein fyrir upplýsingar um að nota stjörnur til að stækka og senda túlla, lista og orðabækur sem fallrök.
Upptaka grunnatriði túlla og lista
Þegar breytur eru skrifaðar vinstra megin, aðskildar með kommum, er hverri breytu úthlutað staki af túpunni eða listanum hægra megin. Það er það sama fyrir bæði túlla og lista (eftirfarandi dæmi eru skrifuð í túlluformi).
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
Athugaðu að þar sem tuples geta sleppt hringsvigum, þá er hægt að nota þetta til að úthluta mörgum breytum á einni línu eins og hér segir.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
Ef fjöldi breyta passar ekki við fjölda þátta kemur villa.
# 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)
Ef fjöldi breyta er minni en fjöldi þátta er hægt að úthluta þeim sem eftir eru sem lista með því að setja stjörnu við breytuheitið (sjá hér að neðan).
Hreiður túplar, ópakkaðar skráningar
Einnig er hægt að pakka niður hreiðri tuplum og listum. Ef þú vilt taka upp innihaldið líka skaltu láta breytuna fylgja með einni af eftirfarandi
()
[]
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
Pakkað með _undirstrik_.
Í Python, ekki aðeins ópakkað, er gildum sem ekki er þörf venjulega úthlutað undirstrikinu (undirstrikinu) _. Það er engin sérstök málfræðileg merking; þeim er einfaldlega úthlutað breytu sem heitir _.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
Að pakka niður með stjörnum
Ef fjöldi breyta er minni en fjöldi þátta mun stjörnu í breytuheitinu valda því að þáttunum er úthlutað saman sem lista.
Þessi setningafræði hefur verið innleidd frá Python 3 og er ekki fáanleg í Python 2.
Einingunum er úthlutað frá upphafi og enda á breyturnar án stjörnur og hinir þættirnir eru úthlutað sem listi yfir breyturnar með stjörnum.
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
Til dæmis, ef þú vilt tengja aðeins fyrstu tvo þættina í túllu eða lista við breytu, gætirðu notað undirstrikið hér að ofan fyrir þá hluta sem ekki er þörf á.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
Það sama má líka skrifa á eftirfarandi hátt
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
Aðeins er hægt að festa eina stjörnu. Ef það eru margar breytur merktar með stjörnu, þá mun myndast SyntaxError villa vegna þess að ekki er hægt að ákvarða hversu mörgum þáttum er úthlutað á hverja breytu.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
Athugaðu að jafnvel einum þætti sem er úthlutað til breytu sem er merkt með stjörnu er úthlutað sem lista.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
Ef það eru engir auka þættir er úthlutað tómum lista.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []