Thuật ngữ "unpacking" đề cập đến quá trình phân tích tuple các mục trong variables riêng lẻ. Trong Python, dấu ngoặc đơn là ký tự phân cách mặc định cho một đại diện văn bản của đối tượng chuỗi.
Các câu lệnh sau để khai báo một tuple là giống nhau.
>>> t1 = (x,y) >>> t1 = x,y >>> type (t1) <class 'tuple'>
Để lưu trữ các mục trong tuple vào các biến riêng lẻ, hãy sử dụng nhiều biến ở bên trái của toán tử gán, như được thể hiện trong ví dụ sau −
tup1 = (10,20,30) x, y, z = tup1 print ("x: ", x, "y: ", "z: ",z)
Nó sẽ tạo ra output −
x: 10 y: 20 z: 30
Đó là cách mà tuple được giải nén vào các biến riêng lẻ.
Trong ví dụ trên, số lượng biến bên trái của toán tử gán bằng với số lượng phần tử trong tuple. Vậy nếu số lượng không bằng với số phần tử thì sao?
Nếu số lượng biến nhiều hơn hoặc ít hơn độ dài của tuple, Python sẽ phát sinh một ValueError.
tup1 = (10,20,30) x, y = tup1 x, y, p, q = tup1
Nó sẽ tạo ra output −
x, y = tup1 ^^^^ ValueError: too many values to unpack (expected 2) x, y, p, q = tup1 ^^^^^^^^^^ ValueError: not enough values to unpack (expected 4, got 3)
Trong trường hợp như vậy, ký hiệu "*" được sử dụng để giải nén. Thêm tiền tố "*" vào "y", như được trình bày dưới đây −
tup1 = (10,20,30) x, *y = tup1 print ("x: ", "y: ", y)
Nó sẽ tạo ra output −
x: y: [20, 30]
Giá trị đầu tiên trong tuple được gán cho "x", và các mục còn lại được gán cho "y" trở thành một danh sách.
Trong ví dụ này, tuple chứa 6 giá trị và có 3 biến để được giải nén. Chúng ta thêm tiền tố "*" vào biến thứ hai.
tup1 = (10,20,30, 40, 50, 60) x, *y, z = tup1 print ("x: ",x, "y: ", y, "z: ", z)
Nó sẽ tạo ra output −
x: 10 y: [20, 30, 40, 50] z: 60
Ở đây, các giá trị được giải nén vào "x" và "z" trước, và sau đó các giá trị còn lại được gán cho "y" dưới dạng một danh sách.
Nếu chúng ta thêm "*" vào biến đầu tiên thì sao?
tup1 = (10,20,30, 40, 50, 60) *x, y, z = tup1 print ("x: ",x, "y: ", y, "z: ", z)
Nó sẽ tạo ra output −
x: [10, 20, 30, 40] y: 50 z: 60
Ở đây, tuple được giải nén theo cách mà các biến riêng lẻ nhận giá trị đầu tiên, để lại các giá trị còn lại cho danh sách "x".