Dẫn nhậpTrong bài trước, Kteam đã giới thiệu đến bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – RETURN. Show Và ở bài này Kteam sẽ lại tìm hiểu với các KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – YIELD.KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – YIELD. Nội dungĐể đọc hiểu bài này tốt nhất bạn cần:
Bạn và Kteam sẽ cùng tìm hiểu những nội dung sau đây
Nhắc lại khái niệm iterablesGiới thiệu generator Lệnh yielditeration
Phương thức sendkteam_lst” ở đây được gọi là một iterable. Mọi thứ mà bạn có thể dùng cú pháp “for … in …” đều là một iterable. Ví dụ như chuỗi, list, tuple, file,.. Vì sao nên dùng yielditerable này rất thuận tiện cho chúng ta lưu dữ và truy xuất thông tin. Và để được như vậy bạn phải lưu trữ những thông tin đó trong các vùng nhớ máy tính của bạn. Vì lẽ đó, sẽ có trường hợp bạn không cần thiết phải giữ tất cả thông tin cùng một lúc vì nó quá nhiều. Giới thiệu generatorLệnh yieldlà iterator, một dạng của iterable nhưng khác ở chỗ bạn không thể tái sử dụng. Vì sao lại như vậy? Generator không lưu trữ tất cả các giá trị của bạn ở bộ nhớ, mà nó sinh ra lần lượt
Phương thức sendgenerator cũng là một iterable, nên nó cũng khá tương tự như khi bạn dùng list hoặc tuple. Nhưng, nếu bạn thử tái sử dụng generator đó
Vì sao nên dùng yield Lệnh yieldPhương thức sendy-i-e-l-d, yield. Lệnh này khá là khó nhớ đặc biệt với những người chưa quen với tiếng Anh. Bạn cũng nên tra google để biết ý nghĩa của từ yield. Điều này sẽ giúp bạn biết rõ hơn lệnh này. Vì sao nên dùng yieldreturn, tuy nhiên nó khác return ở chỗ trả về một object thì yield sẽ trả về một generator. Kteam đã từng giới thiệu với các bạn khái niệm này ở bài ITERATION & MỘT SỐ HÀM HỖ TRỢ CHO ITERATION OBJECT TRONG PYTHON. Và ở bài này, chúng ta sẽ nhắc lại vài khái niệm trước khi đi đến lệnh yieldreturn sau đó ta sẽ so sánh nó với yield
Khi bạn tạo ra một list, bạn có thể truy xuất lần lượt từng giá trị của list đó. Người ta gọi đó làiteration
“kteam_lst” ở đây được gọi là một iterable. Mọi thứ mà bạn có thể dùng cú pháp “for … in …” đều là một iterable. Ví dụ như chuỗi, list, tuple, file,..return sẽ quăng lại một list lưu trữ toàn bộ giá trị sau khi bình phương, thế nên bạn phải tạo một list để lưu hết những giá trị đó. Tuy nhiên, điều này là không cần thiết với yield. Nó sẽ lần lượt sinh ra từng giá trị bình phương một mà không cần một list để lưu trữ. Mỗi lần bạn gọi nó, nó sẽ chạy vào sinh ra cho bạn giá trị bạn cần như việc bạn sử dụng vòng lặp for để đọc từng giá trị trong một list. Nhưng iterable này rất thuận tiện cho chúng ta lưu dữ và truy xuất thông tin. Và để được như vậy bạn phải lưu trữ những thông tin đó trong các vùng nhớ máy tính của bạn. Vì lẽ đó, sẽ có trường hợp bạn không cần thiết phải giữ tất cả thông tin cùng một lúc vì nó quá nhiều.yield trong một hàm và khi gọi hàm đó, những dòng lệnh trong hàm sẽ không chạy ngay. Nó trả về một generator. Và mỗi khi bạn yêu cần nó sinh thì nó mới bắt đầu chạy vào bên trong thực hiện những dòng lệnh trong hàm CHO TỚI KHI GẶP LỆNH YIELDvà nó sẽ sinh ra giá trị bạn yêu cầu yield, hàm bây giờ được tạm dừng. Bạn cần lưu ý, là chỉ tạm dừng, có nghĩa là nếu lần sau gọi, hàm sẽ tiếp tục chạy ở phần đó không phải chạy lại từ đầu Generator là iterator, một dạng của iterable nhưng khác ở chỗ bạn không thể tái sử dụng. Vì sao lại như vậy? Generator không lưu trữ tất cả các giá trị của bạn ở bộ nhớ, mà nó sinh ra lần lượtyield hết? Khi mà nó đi hết phần còn lại của hàm mà không gặp lệnh yield. Như đã nói, generator cũng là một iterable, nên nó cũng khá tương tự như khi bạn dùng list hoặc tuple. Nhưng, nếu bạn thử tái sử dụng generator đó Bạn thấy đấy, không có giá trị nào được in ra. Bởi vì khi nó sinh ra giá trị đầu tiên là 0, khi bạn kêu nó sinh tiếp giá trị 1, nó sẽ vứt bỏ giá trị 0 để nhường chỗ cho giá trị 1, và nếu bạn tiếp tục yêu cầu sinh thêm giá trị nó sẽ lại tiếp tục công việc như cũ cho tới khi kết thúc.Các bạn chú ý: y-i-e-l-d, yield. Lệnh này khá là khó nhớ đặc biệt với những người chưa quen với tiếng Anh. Bạn cũng nên tra google để biết ý nghĩa của từ yield. Điều này sẽ giúp bạn biết rõ hơn lệnh này.yield khi được gọi tiếp thì sẽ yield sẽ không trả về bất cứ thứ gì, có nghĩa là None object cũng không được trả về.
Phương thức send
Kteam đã từng giới thiệu với các bạn khái niệm này ở bài ITERATION & MỘT SỐ HÀM HỖ TRỢ CHO ITERATION OBJECT TRONG PYTHON. Và ở bài này, chúng ta sẽ nhắc lại vài khái niệm trước khi đi đến lệnh yield Khi bạn tạo ra một list, bạn có thể truy xuất lần lượt từng giá trị của list đó. Người ta gọi đó làiteration
“kteam_lst” ở đây được gọi là một iterable. Mọi thứ mà bạn có thể dùng cú pháp “for … in …” đều là một iterable. Ví dụ như chuỗi, list, tuple, file,..
Nhưng iterable này rất thuận tiện cho chúng ta lưu dữ và truy xuất thông tin. Và để được như vậy bạn phải lưu trữ những thông tin đó trong các vùng nhớ máy tính của bạn. Vì lẽ đó, sẽ có trường hợp bạn không cần thiết phải giữ tất cả thông tin cùng một lúc vì nó quá nhiều.send. Một lần nữa, hãy coi thật kĩ ví dụ send vừa trên trước khi đến với ví dụ tiếp sau đây
Vì sao nên dùng yieldKteam đã từng giới thiệu với các bạn khái niệm này ở bài ITERATION & MỘT SỐ HÀM HỖ TRỢ CHO ITERATION OBJECT TRONG PYTHON. Và ở bài này, chúng ta sẽ nhắc lại vài khái niệm trước khi đi đến lệnh yieldgenerator, để duyệt các giá trị thì generator sẽ nhanh hơn khi khi bạn duyệt một iterable lưu trữ một lúc tất cả các giá trị Bộ nhớ, bạn sẽ phải cân nhắc việc dùng yield khi bạn làm việc với những tập dữ liệu lớn. Lúc đó, bạn sẽ phải xem xét lại xem liệu bạn có cần giữ tất cả các giá trị một lúc không hay chỉ cần sinh ra từng giá trị một để tiết kiệm bộ nhớ. Còn một số ưu điểm nữa của yield, bạn đọc có thể tham khảo câu trả lời sau trên Stack Overflow:yield, bạn đọc có thể tham khảo câu trả lời sau trên Stack Overflow:
Đáp án bài trướcBạ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 – RETURN 1.
2. 0Kết luậnQua bài viết này, Bạn đã biết về lệnh yield trong hàm. Ở bài tiếp theo, Kteam sẽ nói đến HÀM NẶC DANH TRONG PYTHON. 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 quyê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ậnNế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. |