Dalam Python, elemen tuple atau senarai boleh dikembangkan dan diberikan kepada berbilang pembolehubah. Ini dipanggil pembongkaran urutan atau pembongkaran tugasan.
Butiran berikut diterangkan di sini.
- Membongkar asas tupel dan senarai
- Tuple bersarang, senarai yang dibongkar
- Membongkar dengan garis bawah:
_
- Membongkar dengan asterisk:
*
Lihat artikel berikut untuk mendapatkan maklumat tentang menggunakan asterisk untuk mengembangkan dan menghantar tupel, senarai dan kamus sebagai hujah fungsi.
Membongkar asas tupel dan senarai
Apabila pembolehubah ditulis di sebelah kiri, dipisahkan dengan koma, setiap pembolehubah diberikan elemen tuple atau senarai di sebelah kanan. Ia adalah sama untuk kedua-dua tupel dan senarai (contoh berikut ditulis dalam bentuk tupel).
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
Ambil perhatian bahawa kerana tupel boleh menghilangkan kurungan bulat, ini boleh digunakan untuk menetapkan berbilang nilai kepada berbilang pembolehubah pada satu baris seperti berikut.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
Jika bilangan pembolehubah tidak sepadan dengan bilangan elemen, ralat berlaku.
# 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)
Jika bilangan pembolehubah kurang daripada bilangan elemen, elemen yang selebihnya boleh ditetapkan sebagai senarai dengan menambahkan asterisk pada nama pembolehubah (lihat di bawah).
Tuple bersarang, senarai yang dibongkar
Tuple dan senarai bersarang juga boleh dibongkar. Jika anda ingin membongkar kandungan juga, sertakan pembolehubah dalam salah satu daripada yang berikut
()
[]
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
Dibongkar dengan _garis bawah_.
Dalam Python, bukan sahaja dibongkar, nilai yang tidak diperlukan secara konvensional diberikan kepada garis bawah (garis bawah) _. Tiada makna tatabahasa yang istimewa; mereka hanya diberikan kepada pembolehubah bernama _.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
Membongkar dengan asterisk
Jika bilangan pembolehubah kurang daripada bilangan elemen, asterisk dalam nama pembolehubah akan menyebabkan elemen ditugaskan bersama sebagai senarai.
Sintaks ini telah dilaksanakan sejak Python 3 dan tidak tersedia dalam Python 2.
Elemen diperuntukkan dari awal dan akhir kepada pembolehubah tanpa asterisk, dan elemen yang selebihnya diperuntukkan sebagai senarai kepada pembolehubah dengan asterisk.
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
Sebagai contoh, jika anda ingin menetapkan hanya dua elemen pertama tuple atau senarai kepada pembolehubah, anda boleh menggunakan garis bawah di atas untuk bahagian yang tidak diperlukan.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
Perkara yang sama juga boleh ditulis seperti berikut
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
Hanya satu asterisk boleh dilampirkan. Jika terdapat berbilang pembolehubah yang ditandakan dengan asterisk, ralat SyntaxError akan terhasil kerana tidak mungkin untuk menentukan bilangan elemen yang diberikan kepada setiap pembolehubah.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
Ambil perhatian bahawa walaupun satu elemen yang diberikan kepada pembolehubah yang ditandakan dengan asterisk ditetapkan sebagai senarai.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
Jika tiada unsur tambahan, senarai kosong diberikan.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []