Hướng dẫn how do i unpack an iterable in python? - làm cách nào để giải nén một tệp có thể lặp lại trong python?

Tôi biết ______41

Tuy nhiên, trong thực tế, chúng tôi cũng sử dụng toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 để giải nén trình lặp lại, nhưng tôi chưa tìm thấy một tài liệu giải thích nó.

Xem ví dụ:

>>> a = [1,2,3]
>>> print(a)
[1, 2, 3]

Giải nén có thể lặp lại

>>> print(*a)
1,2,3

Giải nén Iterator

>>> it = iter(a)
>>> print(*it)
1,2,3

Hướng dẫn how do i unpack an iterable in python? - làm cách nào để giải nén một tệp có thể lặp lại trong python?

Kederrac

16.4K6 Huy hiệu vàng29 Huy hiệu bạc54 Huy hiệu đồng6 gold badges29 silver badges54 bronze badges

Đã hỏi ngày 15 tháng 6 năm 2018 lúc 15:42Jun 15, 2018 at 15:42

3

Asterisk

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 có thể giải nén được không bao gồm

Itable là một đối tượng, mà người ta có thể lặp lại. Nó tạo ra một trình lặp khi được chuyển đến phương thức iter (). Iterator là một đối tượng, được sử dụng để lặp lại trên một đối tượng có thể sử dụng phương thức tiếp theo (). Trình lặp có phương thức tiếp theo (), trả về mục tiếp theo của đối tượng.next() method. Iterators have next() method, which returns the next item of the object.

Lưu ý rằng mọi trình lặp lại cũng là một điều không thể thay đổi, nhưng không phải mọi người lặp lại đều là một người lặp.

(từ Geekforgeek)

Trong ví dụ của bạn, trình lặp của bạn là một điều không thể đạt được để bạn có thể áp dụng

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 Toán tử giải nén có thể lặp lại

Bạn có thể có một cái nhìn qua Pep 448

Schot

10,6K2 Huy hiệu vàng46 Huy hiệu bạc70 Huy hiệu đồng2 gold badges46 silver badges70 bronze badges

Đã trả lời ngày 19 tháng 9 năm 2019 lúc 13:21Sep 19, 2019 at 13:21

Hướng dẫn how do i unpack an iterable in python? - làm cách nào để giải nén một tệp có thể lặp lại trong python?

Kederrackederrackederrac

16.4K6 Huy hiệu vàng29 Huy hiệu bạc54 Huy hiệu đồng6 gold badges29 silver badges54 bronze badges

Đã hỏi ngày 15 tháng 6 năm 2018 lúc 15:42

Asterisk

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 có thể giải nén được không bao gồm
Return the iterator object itself. This is required to allow both containers and iterators to be used with the for and in statements. This method corresponds to the tp_iter slot of the type structure for Python objects in the Python/C API.

Itable là một đối tượng, mà người ta có thể lặp lại. Nó tạo ra một trình lặp khi được chuyển đến phương thức iter (). Iterator là một đối tượng, được sử dụng để lặp lại trên một đối tượng có thể sử dụng phương thức tiếp theo (). Trình lặp có phương thức tiếp theo (), trả về mục tiếp theo của đối tượng.

Lưu ý rằng mọi trình lặp lại cũng là một điều không thể thay đổi, nhưng không phải mọi người lặp lại đều là một người lặp.Jun 15, 2018 at 16:03

(từ Geekforgeek)Sneftel

Trong ví dụ của bạn, trình lặp của bạn là một điều không thể đạt được để bạn có thể áp dụng

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 Toán tử giải nén có thể lặp lại12 gold badges69 silver badges103 bronze badges

Giới thiệu

Giải nén trong Python đề cập đến một hoạt động bao gồm việc gán một giá trị có thể lặp lại cho một tuple (hoặc

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9) của các biến trong một câu lệnh gán duy nhất. Để bổ sung, thuật ngữ đóng gói có thể được sử dụng khi chúng tôi thu thập một số giá trị trong một biến duy nhất bằng toán tử giải nén có thể lặp lại,
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1.

Trong lịch sử, các nhà phát triển Python đã nói chung gọi loại hoạt động này là việc giải nén. Tuy nhiên, vì tính năng Python này hóa ra khá hữu ích và phổ biến, nên nó đã được khái quát cho tất cả các loại lặp. Ngày nay, một thuật ngữ hiện đại và chính xác hơn sẽ có thể giải nén được.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu việc giải nén có thể thay đổi là gì và làm thế nào chúng ta có thể tận dụng tính năng Python này để làm cho mã của chúng ta dễ đọc hơn, có thể duy trì và pythonic.

Ngoài ra, chúng tôi cũng sẽ đề cập đến một số ví dụ thực tế về cách sử dụng tính năng giải nén có thể lặp lại trong bối cảnh các hoạt động bài tập, vòng lặp

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1, định nghĩa chức năng và các lệnh gọi chức năng.

Đóng gói và giải nén trong Python

Python cho phép một biến

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 (hoặc
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9) xuất hiện ở phía bên trái của hoạt động gán. Mỗi biến trong
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 có thể nhận được một giá trị (hoặc nhiều hơn, nếu chúng ta sử dụng toán tử
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1) từ một điều đáng tin cậy ở phía bên phải của gán.

Vì lý do lịch sử, các nhà phát triển Python thường gọi đây là việc giải nén. Tuy nhiên, vì tính năng này đã được khái quát hóa cho tất cả các loại có thể lặp lại, một thuật ngữ chính xác hơn sẽ có thể giải nén được và đó là những gì chúng ta sẽ gọi nó trong hướng dẫn này.

Các hoạt động giải nén đã được các nhà phát triển Python khá phổ biến vì họ có thể làm cho mã của chúng tôi dễ đọc hơn và thanh lịch. Chúng ta hãy xem xét kỹ hơn để giải nén trong Python và xem làm thế nào tính năng này có thể cải thiện mã của chúng tôi.

Giải nén bộ dữ liệu

Trong Python, chúng ta có thể đặt một

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 các biến ở phía bên trái của toán tử gán (
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
7) và
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 của các giá trị ở phía bên phải. Các giá trị bên phải sẽ được tự động gán cho các biến bên trái theo vị trí của chúng trong
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2. Điều này thường được gọi là tuple giải nén trong Python. Kiểm tra ví dụ sau:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3

Khi chúng tôi đặt các bộ dữ liệu ở cả hai bên của toán tử gán, một hoạt động giải nén tuple diễn ra. Các giá trị bên phải được gán cho các biến bên trái theo vị trí tương đối của chúng trong mỗi

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2. Như bạn có thể thấy trong ví dụ trên,
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 sẽ là
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
2,
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
3 sẽ là
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
4 và
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
5 sẽ là
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
6.

Để tạo đối tượng

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2, chúng ta không cần sử dụng một cặp dấu ngoặc đơn
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
8 làm phân định. Điều này cũng hoạt động để giải nén tple, vì vậy các cú pháp sau đây tương đương:

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3

Vì tất cả các biến thể này là cú pháp Python hợp lệ, chúng tôi có thể sử dụng bất kỳ biến thể nào trong số chúng, tùy thuộc vào tình huống. Có thể cho rằng, cú pháp cuối cùng được sử dụng phổ biến hơn khi nói đến việc giải nén ở Python.

Khi chúng tôi giải nén các giá trị thành các biến bằng cách sử dụng việc giải nén tple, số lượng biến ở phía bên trái

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 phải khớp chính xác với số lượng giá trị ở phía bên phải
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2. Nếu không, chúng ta sẽ nhận được một
>>> # Unpacking strings
>>> a, b, c = '123'
>>> a
'1'
>>> b
'2'
>>> c
'3'
>>> # Unpacking lists
>>> a, b, c = [1, 2, 3]
>>> a
1
>>> b
2
>>> c
3
>>> # Unpacking generators
>>> gen = (i ** 2 for i in range(3))
>>> a, b, c = gen
>>> a
0
>>> b
1
>>> c
4
>>> # Unpacking dictionaries (keys, values, and items)
>>> my_dict = {'one': 1, 'two':2, 'three': 3}
>>> a, b, c = my_dict  # Unpack keys
>>> a
'one'
>>> b
'two'
>>> c
'three'
>>> a, b, c = my_dict.values()  # Unpack values
>>> a
1
>>> b
2
>>> c
3
>>> a, b, c = my_dict.items()  # Unpacking key-value pairs
>>> a
('one', 1)
>>> b
('two', 2)
>>> c
('three', 3)
1.

Ví dụ: trong mã sau, chúng tôi sử dụng hai biến ở bên trái và ba giá trị ở bên phải. Điều này sẽ tăng

>>> # Unpacking strings
>>> a, b, c = '123'
>>> a
'1'
>>> b
'2'
>>> c
'3'
>>> # Unpacking lists
>>> a, b, c = [1, 2, 3]
>>> a
1
>>> b
2
>>> c
3
>>> # Unpacking generators
>>> gen = (i ** 2 for i in range(3))
>>> a, b, c = gen
>>> a
0
>>> b
1
>>> c
4
>>> # Unpacking dictionaries (keys, values, and items)
>>> my_dict = {'one': 1, 'two':2, 'three': 3}
>>> a, b, c = my_dict  # Unpack keys
>>> a
'one'
>>> b
'two'
>>> c
'three'
>>> a, b, c = my_dict.values()  # Unpack values
>>> a
1
>>> b
2
>>> c
3
>>> a, b, c = my_dict.items()  # Unpacking key-value pairs
>>> a
('one', 1)
>>> b
('two', 2)
>>> c
('three', 3)
1 nói với chúng tôi rằng có quá nhiều giá trị để giải nén:

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)

Lưu ý: Ngoại lệ duy nhất cho điều này là khi chúng tôi sử dụng toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 để đóng gói một số giá trị trong một biến như chúng tôi sẽ thấy sau này. The only exception to this is when we use the
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 operator to pack several values in one variable as we'll see later on.

Mặt khác, nếu chúng ta sử dụng nhiều biến hơn các giá trị, thì chúng ta sẽ nhận được

>>> # Unpacking strings
>>> a, b, c = '123'
>>> a
'1'
>>> b
'2'
>>> c
'3'
>>> # Unpacking lists
>>> a, b, c = [1, 2, 3]
>>> a
1
>>> b
2
>>> c
3
>>> # Unpacking generators
>>> gen = (i ** 2 for i in range(3))
>>> a, b, c = gen
>>> a
0
>>> b
1
>>> c
4
>>> # Unpacking dictionaries (keys, values, and items)
>>> my_dict = {'one': 1, 'two':2, 'three': 3}
>>> a, b, c = my_dict  # Unpack keys
>>> a
'one'
>>> b
'two'
>>> c
'three'
>>> a, b, c = my_dict.values()  # Unpack values
>>> a
1
>>> b
2
>>> c
3
>>> a, b, c = my_dict.items()  # Unpacking key-value pairs
>>> a
('one', 1)
>>> b
('two', 2)
>>> c
('three', 3)
1 nhưng lần này tin nhắn nói rằng không có đủ giá trị để giải nén:

>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)

Nếu chúng ta sử dụng một số lượng biến và giá trị khác nhau trong một thao tác giải nén tuple, thì chúng ta sẽ nhận được

>>> # Unpacking strings
>>> a, b, c = '123'
>>> a
'1'
>>> b
'2'
>>> c
'3'
>>> # Unpacking lists
>>> a, b, c = [1, 2, 3]
>>> a
1
>>> b
2
>>> c
3
>>> # Unpacking generators
>>> gen = (i ** 2 for i in range(3))
>>> a, b, c = gen
>>> a
0
>>> b
1
>>> c
4
>>> # Unpacking dictionaries (keys, values, and items)
>>> my_dict = {'one': 1, 'two':2, 'three': 3}
>>> a, b, c = my_dict  # Unpack keys
>>> a
'one'
>>> b
'two'
>>> c
'three'
>>> a, b, c = my_dict.values()  # Unpack values
>>> a
1
>>> b
2
>>> c
3
>>> a, b, c = my_dict.items()  # Unpacking key-value pairs
>>> a
('one', 1)
>>> b
('two', 2)
>>> c
('three', 3)
1. Đó là bởi vì Python cần phải biết một cách rõ ràng giá trị nào đi vào biến số nào, vì vậy nó có thể thực hiện bài tập tương ứng.

Giải nén lặp lại

Tính năng giải nén Tuple đã trở nên phổ biến trong số các nhà phát triển Python đến nỗi cú pháp được mở rộng để làm việc với bất kỳ đối tượng có thể điều chỉnh nào. Yêu cầu duy nhất là số lượng có thể mang lại chính xác một mục cho mỗi biến trong nhận

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 (hoặc
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9).

Kiểm tra các ví dụ sau đây về cách thức giải nén có thể giải nén trong Python:

>>> # Unpacking strings
>>> a, b, c = '123'
>>> a
'1'
>>> b
'2'
>>> c
'3'
>>> # Unpacking lists
>>> a, b, c = [1, 2, 3]
>>> a
1
>>> b
2
>>> c
3
>>> # Unpacking generators
>>> gen = (i ** 2 for i in range(3))
>>> a, b, c = gen
>>> a
0
>>> b
1
>>> c
4
>>> # Unpacking dictionaries (keys, values, and items)
>>> my_dict = {'one': 1, 'two':2, 'three': 3}
>>> a, b, c = my_dict  # Unpack keys
>>> a
'one'
>>> b
'two'
>>> c
'three'
>>> a, b, c = my_dict.values()  # Unpack values
>>> a
1
>>> b
2
>>> c
3
>>> a, b, c = my_dict.items()  # Unpacking key-value pairs
>>> a
('one', 1)
>>> b
('two', 2)
>>> c
('three', 3)

Khi nói đến việc giải nén trong Python, chúng ta có thể sử dụng bất kỳ điều gì có thể lặp lại ở phía bên phải của toán tử chuyển nhượng. Phía bên trái có thể được lấp đầy bằng

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 hoặc với
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9 của các biến. Kiểm tra ví dụ sau trong đó chúng tôi sử dụng
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 ở phía bên phải của câu lệnh gán:

>>> [a, b, c] = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3

Nó hoạt động theo cùng một cách nếu chúng ta sử dụng trình lặp

>>> [a, b, c] = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3
1:

>>> x, y, z = range(3)
>>> x
0
>>> y
1
>>> z
2

Mặc dù đây là một cú pháp Python hợp lệ, nhưng nó thường không được sử dụng trong mã thực và có thể hơi khó hiểu cho các nhà phát triển Python mới bắt đầu.

Cuối cùng, chúng ta cũng có thể sử dụng các đối tượng

>>> [a, b, c] = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3
2 trong các hoạt động giải nén. Tuy nhiên, vì các bộ là bộ sưu tập không có thứ tự, thứ tự của các bài tập có thể là loại không mạch lạc và có thể dẫn đến các lỗi tinh tế. Kiểm tra ví dụ sau:

>>> print(*a)
1,2,3
0

Nếu chúng tôi sử dụng các bộ trong các hoạt động giải nén, thì thứ tự cuối cùng của các bài tập có thể khá khác với những gì chúng tôi muốn và mong đợi. Vì vậy, tốt nhất là tránh sử dụng các bộ trong các hoạt động giải nén trừ khi thứ tự chuyển nhượng không quan trọng đối với mã của chúng tôi.

Đóng gói với toán tử *

Toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 được biết đến, trong bối cảnh này, là toán tử giải nén tuple (hoặc có thể lặp lại). Nó mở rộng chức năng giải nén để cho phép chúng tôi thu thập hoặc đóng gói nhiều giá trị trong một biến duy nhất. Trong ví dụ sau, chúng tôi đóng gói
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 của các giá trị thành một biến duy nhất bằng cách sử dụng toán tử
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1:

>>> print(*a)
1,2,3
1

Để mã này hoạt động, phía bên trái của bài tập phải là

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 (hoặc
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9). Đó là lý do tại sao chúng tôi sử dụng dấu phẩy kéo dài.
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 này có thể chứa nhiều biến như chúng ta cần. Tuy nhiên, nó chỉ có thể chứa một biểu thức được gắn sao.

Chúng ta có thể tạo thành một biểu thức được nhìn thấy bằng cách sử dụng toán tử giải nén,

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1, cùng với định danh Python hợp lệ, giống như
>>> x, y, z = range(3)
>>> x
0
>>> y
1
>>> z
2
0 trong mã trên. Phần còn lại của các biến ở phía bên trái
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 được gọi là các biến bắt buộc vì chúng phải được lấp đầy bằng các giá trị cụ thể, nếu không, chúng ta sẽ gặp lỗi. Đây là cách thức hoạt động trong thực tế.

Đóng gói các giá trị kéo dài trong

>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
3:

>>> print(*a)
1,2,3
2

Đóng gói các giá trị bắt đầu trong

>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1:

>>> print(*a)
1,2,3
3

Đóng gói một giá trị trong

>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 vì
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
3 và
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
5 là bắt buộc:

>>> print(*a)
1,2,3
4

Đóng gói không có giá trị trong

>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 (
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 mặc định là
>>> x, y, z = range(3)
>>> x
0
>>> y
1
>>> z
2
9) vì
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
3,
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
5 và
>>> print(*a)
1,2,3
02 là bắt buộc:

>>> print(*a)
1,2,3
5

Không cung cấp giá trị cho biến bắt buộc (

>>> print(*a)
1,2,3
03), do đó xảy ra lỗi:

>>> print(*a)
1,2,3
6

Các giá trị đóng gói trong một biến với toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 có thể hữu ích khi chúng ta cần thu thập các phần tử của trình tạo trong một biến duy nhất mà không sử dụng hàm
>>> print(*a)
1,2,3
05. Trong các ví dụ sau, chúng tôi sử dụng toán tử
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 để đóng gói các phần tử của biểu thức máy phát và đối tượng phạm vi cho một biến riêng lẻ:

>>> print(*a)
1,2,3
7

Trong các ví dụ này, toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 đóng gói các phần tử trong
>>> print(*a)
1,2,3
08 và
>>> print(*a)
1,2,3
09 thành
>>> print(*a)
1,2,3
10 và
>>> print(*a)
1,2,3
11. Với cú pháp của anh ấy, chúng tôi tránh được sự cần thiết phải gọi
>>> print(*a)
1,2,3
05 để tạo
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9 các giá trị từ đối tượng
>>> print(*a)
1,2,3
14, biểu thức trình tạo hoặc hàm trình tạo.

Lưu ý rằng chúng tôi không thể sử dụng toán tử giải nén,

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1, để đóng gói nhiều giá trị vào một biến mà không cần thêm dấu phẩy kéo vào biến ở phía bên trái của bài tập. Vì vậy, mã sau sẽ không hoạt động:

>>> print(*a)
1,2,3
8

Nếu chúng tôi cố gắng sử dụng toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 để đóng gói một số giá trị vào một biến duy nhất, thì chúng tôi cần sử dụng cú pháp Singleton
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2. Ví dụ: để làm cho các ví dụ trên hoạt động, chúng ta chỉ cần thêm dấu phẩy sau biến
>>> print(*a)
1,2,3
11, như trong
>>> print(*a)
1,2,3
19.

Sử dụng đóng gói và giải nén trong thực tế

Các hoạt động đóng gói và giải nén có thể khá hữu ích trong thực tế. Họ có thể làm cho mã của bạn rõ ràng, có thể đọc được và Pythonic. Chúng ta hãy xem một số trường hợp sử dụng phổ biến của việc đóng gói và giải nén trong Python.

Gán song song

Một trong những trường hợp sử dụng phổ biến nhất của việc giải nén trong Python là những gì chúng ta có thể gọi là gán song song. Bài tập song song cho phép bạn gán các giá trị theo số IT có thể điều chỉnh cho

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 (hoặc
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9) của các biến trong một câu lệnh duy nhất và thanh lịch.

Ví dụ: giả sử chúng tôi có một cơ sở dữ liệu về các nhân viên trong công ty của chúng tôi và chúng tôi cần gán từng mục trong danh sách cho một biến mô tả. Nếu chúng ta bỏ qua cách các hoạt động giải nén có thể lặp lại trong Python, chúng ta có thể tự viết mã như thế này:

>>> print(*a)
1,2,3
9

Mặc dù mã này hoạt động, việc xử lý chỉ mục có thể vụng về, khó gõ và khó hiểu. Một giải pháp sạch hơn, dễ đọc hơn và pythonic có thể được mã hóa như sau:

>>> it = iter(a)
>>> print(*it)
1,2,3
0

Sử dụng việc giải nén trong Python, chúng ta có thể giải quyết vấn đề của ví dụ trước bằng một tuyên bố duy nhất, đơn giản và thanh lịch. Sự thay đổi nhỏ bé này sẽ làm cho mã của chúng tôi dễ đọc và hiểu cho người mới đến các nhà phát triển.

Trao đổi giá trị giữa các biến

Một ứng dụng thanh lịch khác của việc giải nén trong Python là hoán đổi các giá trị giữa các biến mà không sử dụng biến tạm thời hoặc phụ trợ. Ví dụ: giả sử chúng ta cần trao đổi các giá trị của hai biến

>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 và
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
3. Để làm điều này, chúng ta có thể gắn bó với giải pháp truyền thống và sử dụng một biến tạm thời để lưu trữ giá trị được hoán đổi như sau:

>>> it = iter(a)
>>> print(*it)
1,2,3
1

Quy trình này thực hiện ba bước và một biến tạm thời mới. Nếu chúng ta sử dụng giải nén trong Python, thì chúng ta có thể đạt được kết quả tương tự trong một bước duy nhất và ngắn gọn:

>>> it = iter(a)
>>> print(*it)
1,2,3
2

Trong tuyên bố

>>> print(*a)
1,2,3
24, chúng tôi đang chỉ định lại
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 thành
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
3 và
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
3 thành
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 trong một dòng mã. Đây là rất nhiều dễ đọc và đơn giản hơn. Ngoài ra, lưu ý rằng với kỹ thuật này, không cần một biến tạm thời mới.

Thu thập nhiều giá trị với *

Khi chúng tôi làm việc với một số thuật toán, có thể có các tình huống trong đó chúng tôi cần phân chia các giá trị của một chuỗi hoặc một chuỗi trong các khối giá trị để xử lý thêm. Ví dụ sau đây cho thấy cách sử dụng các hoạt động

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9 và cắt để làm như vậy:

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

>>> it = iter(a)
>>> print(*it)
1,2,3
3

Mặc dù mã này hoạt động như chúng tôi mong đợi, việc xử lý các chỉ số và lát cắt có thể hơi khó chịu, khó đọc và khó hiểu cho người mới bắt đầu. Nó cũng có nhược điểm của việc làm cho mã cứng nhắc và khó duy trì. Trong tình huống này, toán tử giải nén có thể lặp lại,

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 và khả năng đóng gói một số giá trị trong một biến duy nhất có thể là một công cụ tuyệt vời. Kiểm tra việc tái cấu trúc mã trên này:

>>> it = iter(a)
>>> print(*it)
1,2,3
4

Dòng

>>> print(*a)
1,2,3
31 làm cho phép thuật ở đây. Toán tử giải nén có thể lặp lại,
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1, thu thập các yếu tố vào giữa
>>> print(*a)
1,2,3
33 trong
>>> print(*a)
1,2,3
34. Điều này làm cho mã của chúng tôi dễ đọc hơn, có thể duy trì và linh hoạt. Bạn có thể đang nghĩ, tại sao lại linh hoạt hơn? Chà, giả sử rằng
>>> print(*a)
1,2,3
33 thay đổi chiều dài của nó trên đường và bạn vẫn cần thu thập các yếu tố giữa trong
>>> print(*a)
1,2,3
34. Trong trường hợp này, vì chúng tôi đang sử dụng việc giải nén trong Python, không cần thay đổi để mã của chúng tôi hoạt động. Kiểm tra ví dụ này:

>>> it = iter(a)
>>> print(*it)
1,2,3
5

Nếu chúng tôi đang sử dụng cắt trình tự thay vì không bao gồm việc giải nén trong Python, thì chúng tôi sẽ cần cập nhật các chỉ số và lát cắt của mình để nắm bắt chính xác các giá trị mới.

Việc sử dụng toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 để đóng gói một số giá trị trong một biến duy nhất có thể được áp dụng trong nhiều cấu hình khác nhau, với điều kiện là Python có thể xác định rõ ràng phần tử nào (hoặc phần tử) để gán cho từng biến. Hãy xem các ví dụ sau:

>>> it = iter(a)
>>> print(*it)
1,2,3
6

Chúng ta có thể di chuyển toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 trong
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 (hoặc
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9) của các biến để thu thập các giá trị theo nhu cầu của chúng tôi. Điều kiện duy nhất là Python có thể xác định biến mà biến số giá trị.

Điều quan trọng cần lưu ý là chúng ta không thể sử dụng nhiều biểu thức nhìn chằm chằm trong bài tập nếu chúng ta làm như vậy, thì chúng ta sẽ nhận được

>>> print(*a)
1,2,3
41 như sau:

>>> it = iter(a)
>>> print(*it)
1,2,3
7

Nếu chúng ta sử dụng hai hoặc nhiều

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 trong một biểu thức gán, thì chúng ta sẽ nhận được một
>>> print(*a)
1,2,3
41 nói với chúng ta rằng biểu thức hai sao đã được tìm thấy. Điều này là theo cách đó bởi vì Python không thể xác định rõ ràng giá trị nào (hoặc giá trị) mà chúng tôi muốn gán cho từng biến.

Thả các giá trị không cần thiết với *

Một trường hợp sử dụng phổ biến khác của toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 là sử dụng nó với một tên biến giả để thả một số giá trị vô dụng hoặc không cần thiết. Kiểm tra ví dụ sau:

>>> it = iter(a)
>>> print(*it)
1,2,3
8

Để biết một ví dụ sâu sắc hơn về trường hợp sử dụng này, giả sử chúng ta đang phát triển một tập lệnh cần xác định phiên bản Python mà chúng ta đang sử dụng. Để làm điều này, chúng ta có thể sử dụng thuộc tính

>>> print(*a)
1,2,3
45. Thuộc tính này trả về một tuple chứa năm thành phần của số phiên bản:
>>> print(*a)
1,2,3
46,
>>> print(*a)
1,2,3
47,
>>> print(*a)
1,2,3
48,
>>> print(*a)
1,2,3
49 và
>>> print(*a)
1,2,3
50. Nhưng chúng tôi chỉ cần
>>> print(*a)
1,2,3
46,
>>> print(*a)
1,2,3
47 và
>>> print(*a)
1,2,3
48 để kịch bản của chúng tôi hoạt động, vì vậy chúng tôi có thể bỏ phần còn lại. Đây là một ví dụ:

>>> it = iter(a)
>>> print(*it)
1,2,3
9

Bây giờ, chúng tôi có ba biến mới với thông tin chúng tôi cần. Phần còn lại của thông tin được lưu trữ trong biến giả

>>> print(*a)
1,2,3
54, có thể bị chương trình của chúng tôi bỏ qua. Điều này có thể làm rõ cho các nhà phát triển người mới rằng chúng tôi không muốn (hoặc cần) sử dụng thông tin được lưu trữ trong
>>> print(*a)
1,2,3
54 vì nhân vật này không có ý nghĩa rõ ràng.

Lưu ý: Theo mặc định, ký tự dấu gạch dưới

>>> print(*a)
1,2,3
54 được trình thông dịch Python sử dụng để lưu trữ giá trị kết quả của các câu lệnh chúng tôi chạy trong một phiên tương tác. Vì vậy, trong bối cảnh này, việc sử dụng ký tự này để xác định các biến giả có thể mơ hồ. By default, the underscore character
>>> print(*a)
1,2,3
54 is used by the Python interpreter to store the resulting value of the statements we run in an interactive session. So, in this context, the use of this character to identify dummy variables can be ambiguous.

Trả lại các bộ dữ liệu trong các chức năng

Các hàm Python có thể trả về một số giá trị được phân tách bằng dấu phẩy. Vì chúng ta có thể xác định các đối tượng

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 mà không cần sử dụng dấu ngoặc đơn, loại hoạt động này có thể được hiểu là trả về
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 của các giá trị. Nếu chúng ta mã hóa một hàm trả về nhiều giá trị, thì chúng ta có thể thực hiện các hoạt động đóng gói và giải nén với các giá trị được trả về.

Kiểm tra ví dụ sau trong đó chúng tôi xác định một hàm để tính toán hình vuông và khối lập phương của một số đã cho:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
0

Nếu chúng ta xác định một hàm trả về các giá trị được phân tách bằng dấu phẩy, thì chúng ta có thể thực hiện bất kỳ hoạt động đóng gói hoặc giải nén nào trên các giá trị này.

Hợp nhất Iterables với toán tử *

Một trường hợp sử dụng thú vị khác cho toán tử giải nén,

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1, là khả năng hợp nhất một số vòng lặp thành một chuỗi cuối cùng. Chức năng này hoạt động cho danh sách, bộ dữ liệu và bộ. Hãy xem các ví dụ sau:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
1

Chúng ta có thể sử dụng toán tử giải nén có thể lặp lại,

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1, khi xác định các chuỗi để giải nén các yếu tố của một phần sau (hoặc có thể lặp lại) vào chuỗi cuối cùng. Điều này sẽ cho phép chúng tôi tạo các chuỗi trên đường bay từ các chuỗi hiện có khác mà không gọi các phương thức như
>>> print(*a)
1,2,3
61,
>>> print(*a)
1,2,3
62, v.v.

Hai ví dụ cuối cùng cho thấy đây cũng là một cách dễ đọc và hiệu quả hơn để kết hợp các phép lặp. Thay vì viết

>>> print(*a)
1,2,3
63, chúng tôi chỉ viết
>>> print(*a)
1,2,3
64.

Giải nén từ điển với toán tử **

Trong bối cảnh giải nén trong Python, toán tử

>>> print(*a)
1,2,3
65 được gọi là toán tử giải nén từ điển. Việc sử dụng toán tử này đã được mở rộng bởi PEP 448. Bây giờ, chúng ta có thể sử dụng nó trong các cuộc gọi chức năng, trong các biểu thức toàn diện và trình tạo và trong màn hình.

Một trường hợp sử dụng cơ bản cho toán tử giải nén từ điển là hợp nhất nhiều từ điển thành một từ điển cuối cùng với một biểu thức duy nhất. Hãy xem cách thức hoạt động của nó:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
2

Nếu chúng ta sử dụng toán tử giải nén từ điển bên trong màn hình từ điển, thì chúng ta có thể giải nén từ điển và kết hợp chúng để tạo từ điển cuối cùng bao gồm các cặp giá trị khóa của từ điển gốc, giống như chúng ta đã làm trong mã trên.

Một điểm quan trọng cần lưu ý là, nếu các từ điển chúng ta đang cố gắng hợp nhất có các khóa lặp đi lặp lại hoặc thông thường, thì các giá trị của từ điển bên phải sẽ ghi đè các giá trị của từ điển bên trái nhất. Đây là một ví dụ:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
3

Vì khóa

>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 có mặt trong cả hai từ điển, giá trị chiếm ưu thế đến từ
>>> print(*a)
1,2,3
67, đây là từ điển bên phải. Điều này xảy ra vì Python bắt đầu thêm các cặp giá trị khóa từ trái sang phải. Nếu, trong quá trình, Python tìm thấy các khóa đã thoát, thì trình thông dịch cập nhật các khóa có giá trị mới. Đó là lý do tại sao giá trị của khóa
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
1 được hạ thấp trong ví dụ trên.

Giải nén trong vòng lặp

Chúng ta cũng có thể sử dụng việc giải nén có thể lặp lại trong bối cảnh

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1 vòng lặp. Khi chúng tôi chạy một vòng lặp
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1, vòng lặp gán một mục của nó có thể lặp lại cho biến mục tiêu trong mỗi lần lặp. Nếu mục được gán là có thể lặp lại, thì chúng ta có thể sử dụng
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 của các biến đích. Vòng lặp sẽ giải nén các điều khác nhau trong tầm tay vào
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 của các biến mục tiêu.

Ví dụ, giả sử chúng ta có một tệp chứa dữ liệu về doanh số của một công ty như sau:

Sản phẩmGiá bánĐơn vị đã bán
Bút chì0.25 1500
Sổ tay1.30 550
Cục gôm0.75 1000
.........

Từ bảng này, chúng ta có thể xây dựng một

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9 của hai phần tử. Mỗi
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2 sẽ chứa tên của sản phẩm, giá cả và các đơn vị đã bán. Với thông tin này, chúng tôi muốn tính thu nhập của từng sản phẩm. Để làm điều này, chúng ta có thể sử dụng vòng lặp
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1 như thế này:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
4

Mã này hoạt động như mong đợi. Tuy nhiên, chúng tôi đang sử dụng các chỉ số để có quyền truy cập vào các yếu tố riêng lẻ của mỗi

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2. Điều này có thể khó đọc và hiểu bởi các nhà phát triển người mới.

Chúng ta hãy xem một triển khai thay thế bằng cách sử dụng việc giải nén trong Python:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
5

Bây giờ chúng tôi đang sử dụng việc giải nén có thể giải quyết được trong vòng lặp

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1 của chúng tôi. Điều này làm cho mã của chúng tôi dễ đọc và có thể duy trì hơn vì chúng tôi sử dụng tên mô tả để xác định các yếu tố của mỗi
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
2. Sự thay đổi nhỏ bé này sẽ cho phép một nhà phát triển người mới nhanh chóng hiểu được logic đằng sau mã.

Cũng có thể sử dụng toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 trong vòng lặp
>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1 để đóng gói một số mục trong một biến mục tiêu duy nhất:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
6

Trong vòng lặp

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1 này, chúng tôi sẽ bắt được phần tử đầu tiên của mỗi chuỗi trong
>>> print(*a)
1,2,3
82. Sau đó, toán tử
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 bắt được
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
9 của các giá trị trong biến mục tiêu của nó
>>> print(*a)
1,2,3
85.

Cuối cùng, cấu trúc của các biến mục tiêu phải phù hợp với cấu trúc của ITable. Nếu không, chúng ta sẽ gặp lỗi. Hãy xem ví dụ sau:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
7

Trong vòng lặp đầu tiên, cấu trúc của các biến mục tiêu,

>>> print(*a)
1,2,3
86, đồng ý với cấu trúc của các mục trong itable,
>>> print(*a)
1,2,3
87. Trong trường hợp này, vòng lặp hoạt động như mong đợi. Ngược lại, vòng lặp thứ hai sử dụng cấu trúc của các biến mục tiêu không đồng ý với cấu trúc của các mục trong ITBERBELBER, do đó, vòng lặp không thành công và tăng
>>> # Unpacking strings
>>> a, b, c = '123'
>>> a
'1'
>>> b
'2'
>>> c
'3'
>>> # Unpacking lists
>>> a, b, c = [1, 2, 3]
>>> a
1
>>> b
2
>>> c
3
>>> # Unpacking generators
>>> gen = (i ** 2 for i in range(3))
>>> a, b, c = gen
>>> a
0
>>> b
1
>>> c
4
>>> # Unpacking dictionaries (keys, values, and items)
>>> my_dict = {'one': 1, 'two':2, 'three': 3}
>>> a, b, c = my_dict  # Unpack keys
>>> a
'one'
>>> b
'two'
>>> c
'three'
>>> a, b, c = my_dict.values()  # Unpack values
>>> a
1
>>> b
2
>>> c
3
>>> a, b, c = my_dict.items()  # Unpacking key-value pairs
>>> a
('one', 1)
>>> b
('two', 2)
>>> c
('three', 3)
1.

Đóng gói và giải nén trong các chức năng

Chúng tôi cũng có thể sử dụng các tính năng đóng gói và giải nén của Python khi xác định và gọi các chức năng. Đây là một trường hợp sử dụng khá hữu ích và phổ biến của việc đóng gói và giải nén trong Python.

Trong phần này, chúng tôi sẽ đề cập đến những điều cơ bản về cách sử dụng đóng gói và giải nén trong các hàm Python trong định nghĩa chức năng hoặc trong cuộc gọi chức năng.

Lưu ý: Đối với một tài liệu sâu sắc và chi tiết hơn về các chủ đề này, hãy xem các đối số có độ dài thay đổi trong Python với

>>> print(*a)
1,2,3
89 và
>>> print(*a)
1,2,3
90.
For a more insightful and detailed material on these topics, check out Variable-Length Arguments in Python with
>>> print(*a)
1,2,3
89 and
>>> print(*a)
1,2,3
90.

Xác định các chức năng với * và **

Chúng ta có thể sử dụng các toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 và
>>> print(*a)
1,2,3
65 trong chữ ký của các hàm Python. Điều này sẽ cho phép chúng tôi gọi hàm với số lượng đối số vị trí (
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1) hoặc với số lượng các đối số từ khóa hoặc cả hai. Hãy xem xét chức năng sau:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
8

Hàm trên yêu cầu ít nhất một đối số gọi là

>>> print(*a)
1,2,3
94. Nó cũng có thể chấp nhận một số lượng đối số vị trí và từ khóa. Trong trường hợp này, toán tử
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 thu thập hoặc đóng gói các đối số vị trí bổ sung trong một tuple có tên
>>> print(*a)
1,2,3
96 và toán tử
>>> print(*a)
1,2,3
65 thu thập hoặc đóng gói các đối số từ khóa bổ sung trong một từ điển gọi là
>>> print(*a)
1,2,3
98. Cả hai,
>>> print(*a)
1,2,3
96 và
>>> print(*a)
1,2,3
98, đều tùy chọn và tự động mặc định là
>>> a, b, c = 1, 2
Traceback (most recent call last):
  ...
ValueError: not enough values to unpack (expected 3, got 2)
8 và
>>> it = iter(a)
>>> print(*it)
1,2,3
02.

Mặc dù các tên

>>> print(*a)
1,2,3
96 và
>>> print(*a)
1,2,3
98 được cộng đồng Python sử dụng rộng rãi, chúng không phải là một yêu cầu cho các kỹ thuật này hoạt động. Cú pháp chỉ yêu cầu
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 hoặc
>>> print(*a)
1,2,3
65 theo sau là một định danh hợp lệ. Vì vậy, nếu bạn có thể đưa ra những cái tên có ý nghĩa cho các đối số này, thì hãy làm điều đó. Điều đó chắc chắn sẽ cải thiện khả năng đọc của mã của bạn.

Gọi các chức năng với * và **

Khi gọi các chức năng, chúng tôi cũng có thể hưởng lợi từ việc sử dụng toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 và
>>> print(*a)
1,2,3
65 để giải nén các bộ sưu tập các đối số thành các đối số vị trí hoặc từ khóa riêng biệt. Đây là nghịch đảo của việc sử dụng
>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 và
>>> print(*a)
1,2,3
65 trong chữ ký của một hàm. Trong chữ ký, các toán tử có nghĩa là thu thập hoặc đóng gói một số lượng đối số trong một định danh. Trong cuộc gọi, họ có nghĩa là giải nén một sự khác biệt thành một số đối số.collect or pack a variable number of arguments in one identifier. In the call, they mean unpack an iterable into several arguments.

Đây là một ví dụ cơ bản về cách thức hoạt động của nó:

>>> (a, b, c) = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3
9

Ở đây, toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 giải nén các chuỗi như
>>> it = iter(a)
>>> print(*it)
1,2,3
12 vào các đối số vị trí. Tương tự, nhà điều hành
>>> print(*a)
1,2,3
65 giải nén từ điển vào các đối số có tên khớp với các khóa của từ điển chưa đóng gói.

Chúng tôi cũng có thể kết hợp kỹ thuật này và một kỹ thuật được đề cập trong phần trước để viết các chức năng khá linh hoạt. Đây là một ví dụ:

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
0

Việc sử dụng các toán tử

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1 và
>>> print(*a)
1,2,3
65, khi xác định và gọi các hàm Python, sẽ cung cấp cho chúng các khả năng bổ sung và làm cho chúng linh hoạt và mạnh mẽ hơn.

Sự kết luận

Việc giải nén có thể thay đổi hóa ra là một tính năng khá hữu ích và phổ biến trong Python. Tính năng này cho phép chúng tôi giải nén một biến số thành một số biến. Mặt khác, việc đóng gói bao gồm việc bắt một số giá trị thành một biến bằng toán tử giải nén,

>>> (a, b, c) = 1, 2, 3
>>> a, b, c = (1, 2, 3)
>>> a, b, c = 1, 2, 3
1.

Trong hướng dẫn này, chúng tôi đã học được cách sử dụng việc giải nén có thể giải quyết được trong Python để viết mã pythonic dễ đọc hơn, có thể duy trì và pythonic.

Với kiến ​​thức này, chúng tôi hiện có thể sử dụng việc giải nén có thể lặp lại trong Python để giải quyết các vấn đề phổ biến như gán song song và trao đổi giá trị giữa các biến. Chúng tôi cũng có thể sử dụng tính năng Python này trong các cấu trúc khác như các vòng lặp

>>> a, b = 1, 2, 3
Traceback (most recent call last):
  ...
ValueError: too many values to unpack (expected 2)
1, các cuộc gọi chức năng và định nghĩa chức năng.

Làm thế nào để bạn giải nén một đối tượng trong Python?

Tuy nhiên, có một cách dễ dàng hơn nhiều để làm điều này và đó là bằng cách sử dụng toán tử *. Toán tử * là một toán tử giải nén sẽ giải nén các giá trị từ bất kỳ đối tượng có thể điều chỉnh nào, chẳng hạn như danh sách, bộ dữ liệu, chuỗi, v.v. và đó là nó!using the * operator. The * operator is an unpacking operator that will unpack the values from any iterable object, such as lists, tuples, strings, etc… And that's it!

Làm thế nào để bạn giải nén một chuỗi trong Python?

Mã sau đây giải nén một chuỗi, một danh sách và một chuỗi được tạo theo phạm vi: Trong [5]: thứ nhất, thứ hai = 'hi' trong [6]: print (f '{first} {second}') h i trong [7]: Number1, number2, number3 = [2, 3, 5] trong [8]: print (f '{number1} {number2} {number3}') 2 3 5 trong [9]: ...print(f'{first} {second}') h i In [7]: number1, number2, number3 = [2, 3, 5] In [8]: print(f'{number1} {number2} {number3}') 2 3 5 In [9]: ...

Nhà điều hành giải nén trong Python là gì?

Nói tóm lại, các toán tử giải nén là các toán tử giải nén các giá trị từ các đối tượng có thể sử dụng được trong Python.00:30 Toán tử dấu hoa thị đơn ( *) có thể được sử dụng trên bất kỳ điều gì mà Python cung cấp, trong khi toán tử dấu hoa thị đôi (**) chỉ có thể được sử dụng trên từ điển.operators that unpack the values from iterable objects in Python. 00:30 The single asterisk operator ( * ) can be used on any iterable that Python provides, while the double asterisk operator ( ** ) can only be used on dictionaries.

Làm cách nào để giải nén một chuỗi trong Python?

Phương thức: Sử dụng định dạng () + * Trình điều khiển + Giá trị () Trình điều khiển * được sử dụng để giải nén và gán.Các giá trị được trích xuất bằng các giá trị ().Using format() + * operator + values() The * operator is used to unpack and assign. The values are extracted using values().