Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Từ khóa yield trong Python
Từ khóa yield trong Python được sử dụng đặc biệt với generator để trả về các giá trị theo từng lần lặp. Bài viết này sẽ giúp bạn hiểu rõ mục đích và cách sử dụng yield thông qua các ví dụ minh họa.

Mục đích của yield trong Python
Generators là các hàm trong Python, nhưng thay vì trả về kết quả ngay khi được gọi, chúng tạo ra một "generator object." Trong một hàm thông thường, chúng ta dùng từ khóa return để trả về kết quả, trong khi ở generator, yield sẽ đảm nhiệm vai trò tương tự.
Generator chỉ trả về kết quả khi được lặp hoặc khi được gọi với hàm next(). Khi một giá trị được yield, trạng thái của generator sẽ được lưu lại trong bộ nhớ, và khi bạn tiếp tục lặp, generator sẽ tiếp tục từ trạng thái đó.
Ví dụ về yield
Bài viết này được đăng tại [free tuts .net]
Giả sử chúng ta cần tạo một dãy số từ 0 đến 9. Có hai cách để thực hiện điều này: dùng hàm thông thường hoặc dùng generator.
Tạo dãy số bằng hàm thông thường
def create_sequence_func():
    return [n for n in range(10)]
print(create_sequence_func())
Kết quả:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Tạo dãy số bằng generator
def create_sequence_gen():
    for n in range(10):
        yield n
print(create_sequence_gen())
Kết quả:
<generator object create_sequence_gen at 0x7fd2806d80f8>
In ra kết quả này chỉ hiển thị đối tượng generator, vì generator không trả về giá trị ngay. Để truy cập các phần tử, chúng ta cần lặp qua generator.
Sử dụng for để lặp qua generator trong Python
for n in create_sequence_gen():
    print(n)
Kết quả:
0 1 2 3 4 5 6 7 8 9
Chuyển generator thành danh sách
print(list(create_sequence_gen()))
Kết quả:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Sử dụng next() để lấy từng giá trị
gen = create_sequence_gen() print(next(gen)) print(next(gen))
Kết quả:
0 1
Kết bài
Từ khóa yield trong Python giúp mình tạo các generator, mang lại nhiều lợi ích khi làm việc với các tập dữ liệu lớn vì chúng chỉ tải các phần tử khi cần thiết. Generator sử dụng yield sẽ tạm dừng và lưu trạng thái của nó tại mỗi lần yield, cho phép tiếp tục xử lý từ đúng vị trí đó trong lần lặp tiếp theo.

            Các kiểu dữ liệu trong C ( int - float - double - char ...)        
            Thuật toán tìm ước chung lớn nhất trong C/C++        
            Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)        
            ComboBox - ListBox trong lập trình C# winforms        
            Random trong Python: Tạo số random ngẫu nhiên        
            Lệnh cin và cout trong C++        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng