Hướng dẫn unpack list python - giải nén danh sách python

Dẫn nhập

Trong bài trước, Kteam đã giới thiệu đến bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Phần 2.

Nội dung chính ShowShow

  • Dẫn nhập
  • Packing là gì ? Unpacking là gì ?
  • Unpacking arguments với *
  • Packing arguments với *
  • Unpacking arguments với **
  • Packing arguments với **
  • Củng cố bài học
  • Đáp án bài trước
  • Kết luận
  • Thảo luận

Và ở bài này Kteam sẽ lại tìm hiểu với các bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Packing và  unpacking argumentsKIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Packing và  unpacking arguments

Nội dung

Để đọc hiểu bài này tốt nhất bạn cần:

  • Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON.
  • Xem qua bài CÁCH CHẠY CHƯƠNG TRÌNH PYTHON.
  • Nắm CÁCH GHI CHÚ và BIẾN TRONG PYTHON.
  • CÁC KIỂU DỮ LIỆU ĐƯỢC GIỚI THIỆU TRONG PYTHON
  • CÂU ĐIỀU KIỆN IF TRONG PYTHON
  • VÒNG LẶP WHILE và VÒNG LẶP FOR TRONG PYTHON
  • NHẬP XUẤT TRONG PYTHON

Trong bài này, chúng ta sẽ cùng tìm hiểu những nội dung sau đây:

  • Packing là gì ? Unpacking là gì ?
  • Unpacking arguments với *
  • Packing arguments với *
  • Unpacking arguments với **
  • Packing arguments với **

Packing là gì ? Unpacking là gì ?

Unpacking arguments với *Packing chính là việc đóng gói toàn bộ dữ liệu vào một vùng chứa duy nhất. Còn unpacking thì ngược lại, nó sẽ lần lượt bê ra các giá trị từ một vùng chứa nào đó.

Unpacking arguments với *

Packing arguments với *

>>> def kteam[k, t, e, r]:
...     print[k]
...     print[t, e]
...     print['end', r]
...

Unpacking arguments với **parameter và không có default argument. Vậy nên khi gọi hàm này, bạn buộc phải đưa vào 4 argument.

Packing arguments với **

>>> lst = ['123', 'Kteam', 69.96, 'Henry']

Củng cố bài học

>>> kteam[lst[0], lst[1], lst[2], lst[3]]
123
Kteam 69.96
end Henry

Đáp án bài trước parameter và phải gõ hết 50 indexing để truyền vào cho hàm khi gọi nó?

Kết luận *

>>> kteam[*lst]
123
Kteam 69.96
end Henry

Thảo luận*, bạn không chỉ có thể unpack được các List mà bên cạnh đó bạn có thể unpack các container khác như Tuple, Chuỗi, Generator, Set, Dict [chỉ lấy được key].

Và ở bài này Kteam sẽ lại tìm hiểu với các bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Packing và  unpacking arguments

Nội dungbằng cách unpacking argument như thế này là đang truyền vào dưới dạng positional argument. Hãy cẩn thận sử dụng kĩ thuật này với những hàm có parameter dạng keyword-only argument.

>>> def a[*, s, d]:
...     print[s, d]
...
>>> a[*['a', 'b']]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: a[] takes 0 positional arguments but 2 were given

Để đọc hiểu bài này tốt nhất bạn cần:unpack các giá trị có trong container nhưng vẫn chưa đủ yêu cầu của hàm, thì bạn có thể truyền thêm:

>>> kteam[*['a', 'b', 'c'], 'd']
a
b c
end d

Packing arguments với *

Unpacking arguments với **print chứ? Nó có khả năng nhận được bao nhiêu argument cũng được. Làm sao nó làm được như thế?

Packing arguments với **packing argument. Đôi lúc, bạn sẽ không thể biết trước được bạn sẽ pass vào bao nhiêu argument. Việc kiểm soát điều đó đôi lúc là bất khả thi.

Củng cố bài họcpacking argument. Đồng nghĩa với việc bạn nhờ  một biến đi gói tất cả các giá trị truyền vào cho hàm bằng positional argument thành một Tuple. Nếu không có gì để gói [bạn không truyền vào bất cứ argument nào] thì bạn sẽ nhận được một tuple rỗng. Để giao nhiệm vụ cho một biến làm công việc này, bạn đặt một dấu * trước nó.

>>> def kteam[*args]:
...     print[args]
...     print[type[args]]
...
>>> kteam['Kteam', 69.96, 'Henry']
['Kteam', 69.96, 'Henry']

>>> kteam[*[x for x in range[7]]] # unpack sau đó là pack
[0, 1, 2, 3, 4, 5, 6]

Và ở bài này Kteam sẽ lại tìm hiểu với các bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Packing và  unpacking arguments

Nội dung force keyword-only argument

Để đọc hiểu bài này tốt nhất bạn cần: được phép để 2 parameter cùng làm nhiệm vụ packing argument trong một hàm

Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON. packing parameter còn có những parameter khác, khi gọi hàm muốn truyền giá trị vào cho các parameter sau packing parameter bạn cần phải sử dụng keyword argument.

>>> def f[*args, kter]:
...     print[kter]
...
>>> f['1', '2']
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: f[] missing 1 required keyword-only argument: 'kter'
>>> f['1', '2', kter='3']
3

Xem qua bài CÁCH CHẠY CHƯƠNG TRÌNH PYTHON.

Nắm CÁCH GHI CHÚ và BIẾN TRONG PYTHON. args. Đó không phải là ngẫu nhiên mà là một quy ước nhỏ của các Pythonist với nhau. Thường người ta sẽ sử dụng biến có tên là args [viết gọn của arguments] để làm biến packing.

CÁC KIỂU DỮ LIỆU ĐƯỢC GIỚI THIỆU TRONG PYTHON

Unpacking arguments với **

Packing arguments với **unpacking một Dict chỉ với một dấu *

>>> dic = {'name': 'Kteam', 'member': 69}
>>> def kteam[a, b]:
...     print[a]
...     print[b]
...
>>> kteam[*dic]
name
member

Củng cố bài học

Đáp án bài trướckeyvalue. Vậy nên một dấu * là không đủ nội công để unpack hết được các giá trị. Do đó ta phải nhờ đến một cặp **.

Kết luậnunpacking một Dictionary để truyền argument vào cho hàm khi gọi hàm thì đây chính là dạng keyword argument. Vậy nên bạn phải chắc chắn rằng parameter với key là giống nhau.

>>> dic = {'name': 'Kteam', 'member': 69}
>>> def kteam[a, b]:
...     print[a]
...     print[b]
...
>>> kteam[**dic]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: kteam[] got an unexpected keyword argument 'name'
>>> def kteam[name, member]:
...     print['name =>', name]
...     print['member =>', member]
...

>>> kteam[**dic]
name => Kteam
member => 69

Packing arguments với **

Củng cố bài họcunpacking với ** thì cũng phải có packing. Khác với dấu * là gói những positional argument thì ** lại gói các keyword argument. Và đương nhiên, nó sẽ gói trong một Dict. Nếu không truyền gì vào sẽ là một dict rỗng.

>>> lst = ['123', 'Kteam', 69.96, 'Henry']
0

Tên biến kwargs [viết gọn của keyword arguments] cũng là một quy ước đặt tên.kwargs [viết gọn của keyword arguments] cũng là một quy ước đặt tên.

>>> lst = ['123', 'Kteam', 69.96, 'Henry']
1

Lưu ý: bạn không được phép bỏ các positional parameter sau biến packing mà có ** giống như với *. bạn không được phép bỏ các positional parameter sau biến packing mà có ** giống như với *.

>>> lst = ['123', 'Kteam', 69.96, 'Henry']
2

Nhờ những kiến thức trên, bạn có thể có một hàm cực kì linh hoạt như sau

>>> lst = ['123', 'Kteam', 69.96, 'Henry']
3

Bạn hãy nắm chắc kĩ thuật này, tuy đơn giản nhưng lại được sử dụng rất nhiều.

Củng cố bài học

Đáp án bài trước

Bạn có thể tìm thấy câu hỏi của phần này tại CÂU HỎI CỦNG CỐ trong bài KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Phần 2.

Đáp án: Ta dùng lệnh helpTa dùng lệnh help

>>> lst = ['123', 'Kteam', 69.96, 'Henry']
4

Ta sẽ được cấu trúc của hàm sorted như sau:sorted như sau:

sorted[iterable, /, *, key=None, reverse=False][iterable, /, *, key=None, reverse=False]

Vậy nên các positional only là iterable, còn keyword only là key và reverse.positional onlyiterable, còn keyword only keyreverse.

Kết luận

Qua bài viết này, Bạn đã biết thêm về hàm trong Python qua các khái niệm packing và unpacking arguments.

Ở bài viết sau. Kteam sẽ tiếp tục giới thiệu thêm với các bạn về KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – Phần 4.

Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.“Luyện tập – Thử thách – Không ngại khó”.

Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Bài Viết Liên Quan

Chủ Đề