1|8 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Bài 33: KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – YIELD Xem học website để ủng hộ Kteam: Kiểu liệu function Python – Yield Mọi vấn đề lỗi website làm ảnh hưởng đến bạn thắc mắc, mong muốn khóa học mới, nhằm hỗ trợ cải thiện Website Các bạn vui lòng phản hồi đến Fanpage How Kteam nhé! Dẫn nhập Trong trước, Kteam giới thiệu đến bạn KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – RETURN Và Kteam lại tìm hiểu với KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – YIELD Nội dung Để đọc hiểu tốt bạn cần: Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON Xem qua CÁCH CHẠY CHƯƠNG TRÌNH PYTHON Nắm CÁCH GHI CHÚ 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ÒNG LẶP FOR TRONG PYTHON Copyright © Howkteam.com 2|8 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Bạn Kteam tìm hiểu nội dung sau Nhắc lại khái niệm iterables Giới thiệu generator Lệnh yield Phương thức send Vì nên dùng yield Nhắc lại khái niệm iterables Kteam giới thiệu với bạn khái niệm ITERATION & MỘT SỐ HÀM HỖ TRỢ CHO ITERATION OBJECT TRONG PYTHON Và này, nhắc lại vài khái niệm trước đến lệnh yield Khi bạn tạo list, bạn truy xuất giá trị list Người ta gọi iteration >>> kteam_lst = [1, 'Kteam', 2] >>> for value in kteam_lst: print(value) Kteam “kteam_lst” gọi iterable Mọi thứ mà bạn dùng cú pháp “for … in …” iterable Ví dụ chuỗi, list, tuple, file, Nhưng iterable thuận tiện cho lưu truy xuất thông tin Và để bạn phải lưu trữ thơng tin vùng nhớ máy tính bạn Vì lẽ đó, có trường hợp bạn khơng cần thiết phải giữ tất thơng tin lúc q nhiều Copyright © Howkteam.com KHĨA PYTHON CƠ BẢN HOWKTEAM.COM 3|8 Giới thiệu generator Generator iterator, dạng iterable khác chỗ bạn khơng thể tái sử dụng Vì lại vậy? Generator không lưu trữ tất giá trị bạn nhớ, mà sinh >>> kteam_gen = (value for value in range(3)) >>> for value in kteam_gen: print(value) Như nói, generator iterable, nên tương tự bạn dùng list tuple Nhưng, bạn thử tái sử dụng generator >>> for value in kteam_gen: print(value) >>> Bạn thấy đấy, khơng có giá trị in Bởi sinh giá trị 0, bạn kêu sinh tiếp giá trị 1, vứt bỏ giá trị để nhường chỗ cho giá trị 1, bạn tiếp tục yêu cầu sinh thêm giá trị lại tiếp tục công việc cũ kết thúc Lệnh yield Các bạn ý: y-i-e-l-d, yield Lệnh khó nhớ đặc biệt với người chưa quen với tiếng Anh Bạn nên tra google để biết ý nghĩa từ yield Điều giúp bạn biết rõ lệnh Lệnh cách sử dụng gần giống với lệnh return, nhiên khác return chỗ trả object yield trả generator Chúng ta đến với ví dụ với return sau ta so sánh với yield Copyright © Howkteam.com KHĨA PYTHON CƠ BẢN HOWKTEAM.COM 4|8 >>> def square(lst): sq_lst = [] for num in lst: sq_lst.append(num**2) return sq_lst >>> kteam_ret = square([1, 2, 3]) >>> for value in kteam_ret: print(value) Và sử dụng lệnh yield thay cho return >>> def square(lst): for num in lst: yield num**2 >>> kteam_gen = square([1, 2, 3]) >>> for value in kteam_gen: print(value) Như bạn thấy, return quăng lại list lưu trữ tồn giá trị sau bình phương, nên bạn phải tạo list để lưu hết giá trị Tuy nhiên, điều khơng cần thiết với yield Nó sinh giá trị bình phương mà khơng cần list để lưu trữ Mỗi lần bạn gọi nó, chạy vào sinh cho bạn giá trị bạn cần việc bạn sử dụng vòng lặp for để đọc giá trị list Khi bạn dùng yield hàm gọi hàm đó, dịng lệnh hàm khơng chạy Nó trả generator Và bạn yêu cần sinh bắt đầu chạy vào bên thực dòng lệnh hàm CHO TỚI KHI GẶP LỆNH YIELD sinh giá trị bạn yêu cầu yield, hàm tạm dừng Bạn cần lưu ý, tạm dừng, có nghĩa lần sau gọi, hàm tiếp tục chạy phần khơng phải chạy lại từ đầu Copyright © Howkteam.com KHÓA PYTHON CƠ BẢN HOWKTEAM.COM 5|8 Khi yield hết? Khi mà hết phần cịn lại hàm mà không gặp lệnh yield Bạn hiểu rõ xem hai ví dụ sau >>> def gen(): for value in range(3): print('yield', value + 1, 'times') yield value >>> for value in gen(): print(value) yield times yield times yield times >>> def gen(): yield 'Kteam' print('this is the second yield') yield 'Free education' print('this is the last yield') yield 'Long đẹp trai' print('Will not return anything') >>> for value in test(): print(value) Kteam this is the second yield Free education this is the last yield Long đẹp trai Will not return anything Bạn cần lưu ý thêm, khơng có giá trị yield gọi tiếp yield khơng trả thứ gì, có nghĩa None object khơng trả Copyright © Howkteam.com 6|8 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Lưu ý: cách dùng for bên để duyệt generator, Kteam giới thiệu với bạn hàm next ITERATION & MỘT SỐ HÀM HỖ TRỢ CHO ITERATION OBJECT TRONG PYTHON – hàm để giúp bạn làm công việc tương tự Phương thức send Lưu ý: Bạn đọc cần đọc ngẫm thật kĩ yield phía trước đọc đến phần Đây phương thức giúp bạn gửi giá trị vào generator Cú pháp: generator.send(value) Bạn không cần phải lo lắng không hiểu đoạn code >>> def gen(): for i in range(4): x = yield i print('value sent from you', x) >>> g = gen() # gán generator cho biến g >>> next(g) # gọi hàm next để chạy lệnh yield "x = yield i" >>> g.send('Kteam') # x vừa gán cho biến yield gửi giá trị value sent from you Kteam >>> g.send('Free education') value sent from you Free education Copyright © Howkteam.com 7|8 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM >>> next(g) # lần ta không dùng send, mặc định giá trị gửi vào None value sent from you None Đây ví dụ khác phương thức send Một lần nữa, coi thật kĩ ví dụ send vừa trước đến với ví dụ tiếp sau >>> def gen(): while True: x = yield # ta yield None, ta khơng cần thiết sinh giá trị yield x ** >>> g = gen() >>> next(g) # chạy lệnh yield để ta gửi giá trị cho biến x lần sau >>> g.send(2) >>> next(g) # tiếp tục chạy yield để gửi giá trị >>> g.send(10) 100 Vì nên dùng yield Tốc độ, sử dụng generator, để duyệt giá trị generator nhanh khi bạn duyệt iterable lưu trữ lúc tất giá trị Bộ nhớ, bạn phải cân nhắc việc dùng yield bạn làm việc với tập liệu lớn Lúc đó, bạn phải xem xét lại xem liệu bạn có cần giữ tất giá trị lúc không hay cần sinh giá trị để tiết kiệm nhớ Còn số ưu điểm yield, bạn đọc tham khảo câu trả lời sau Stack Overflow: https://stackoverflow.com/questions/102535/what-can-you-usepython-generator-functions-for Copyright © Howkteam.com 8|8 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Kết luận Qua viết này, Bạn biết lệnh yield hàm Ở tiếp theo, Kteam nói đến HÀM NẶC DANH TRONG PYTHON Cảm ơn bạn theo dõi viết Hãy để lại bình luận góp ý để phát triển viết tốt Đừng quyên “Luyện tập – Thử thách – Khơng ngại khó” Copyright © Howkteam.com ... https://stackoverflow.com/questions/102535/what-can-you-usepython-generator-functions-for Copyright © Howkteam.com 8|8 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Kết luận Qua viết này, Bạn biết lệnh yield hàm Ở tiếp theo, Kteam nói đến HÀM NẶC DANH TRONG PYTHON. .. Howkteam.com 6|8 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Lưu ý: cách dùng for bên để duyệt generator, Kteam giới thiệu với bạn hàm next ITERATION & MỘT SỐ HÀM HỖ TRỢ CHO ITERATION OBJECT TRONG PYTHON – hàm để giúp... tất giá trị Bộ nhớ, bạn phải cân nhắc việc dùng yield bạn làm việc với tập liệu lớn Lúc đó, bạn phải xem xét lại xem liệu bạn có cần giữ tất giá trị lúc không hay cần sinh giá trị để tiết kiệm