Trong ngôn ngữ lập trình Python, yield không đơn giản chỉ là một khái niệm mà còn đóng vai trò như một công cụ quan trọng giúp tối ưu hóa xử lý dữ liệu và nâng cao hiệu suất. Trong bài viết dưới đây, hãy cùng ICANTECH tìm hiểu về yield trong Python nhé!
Generator trong Python là một dạng của iterator và iterable. Có thể lặp qua các giá trị, sau khi đã duyệt qua từng phần tử thì không thể tái sử dụng lại. Generator không lưu trữ tất cả các giá trị trong bộ nhớ cùng một lúc mà nó sinh ra các giá trị khi cần thiết, giúp tiết kiệm bộ nhớ và tối ưu hóa hiệu suất.
def even_numbers(n):
i = 0
while i < n:
yield 2 * i # trả về số chẵn
i += 1
# Khởi tạo generator
gen = even_numbers(5)
# Sử dụng vòng lặp để lấy các số chẵn từ generator
for num in gen:
print(num)
Kết quả nhận được kết quả là các số chẵn từ 0 đến 8 (được sinh ra từ generator) in ra màn hình một cách tuần tự.
“yield” trong Python (hay còn gọi là Python yield) là một từ khóa giống return, giúp trả về giá trị từ một hàm mà không làm mất giá trị của các biến trong hàm đó. Cho phép hàm tạm dừng tại vị trí “yield”, và khi gọi lại hàm, quá trình thực thi sẽ tiếp tục tại vị trí đó. Một hàm với yield được coi là một generator object, cho phép bạn duyệt qua nó như một iterator.
Ví dụ:
def generate_numbers():
yield 1
yield 5
yield 9
for i in generate_numbers():
print(i)
Kết quả
1
5
9
Sau mỗi lần lặp thì hàm được gọi, lúc này câu lệnh yield tương tự return sẽ trả về các giác trị 1, 5, 9 từ 3 lần lặp.
Dưới đây là một số lý do bạn nên sử dụng Yield trong Python:
Khi bạn sử dụng return trong một hàm, hàm sẽ trả về giá trị đã chỉ định và kết thúc thực thi ngay lập tức. Tất cả các biến cục bộ trong hàm sẽ bị xóa sau khi hàm kết thúc.
Không lưu trữ trạng thái: Một khi hàm kết thúc, bạn không thể tiếp tục từ trạng thái cuối cùng của nó.
Ví dụ với return:
def simple_return():
print("Hàm bắt đầu.")
return 10
print("Dòng này sẽ không được thực thi.")
result = simple_return()
print(result) # In ra: 10
Khi bạn sử dụng yield, hàm sẽ tạm dừng và trả về giá trị được chỉ định. Khi gọi hàm lại, nó sẽ tiếp tục thực thi từ vị trí yield cuối cùng mà nó đã dừng lại, giữ trạng thái của tất cả các biến cục bộ.
Lưu trữ trạng thái: yield cho phép bạn lưu trữ trạng thái của biến và tiếp tục thực thi từ trạng thái đó.
Ví dụ với yield:
def simple_yield():
print("Bắt đầu hàm.")
yield 1
print("Tiếp tục từ yield đầu tiên.")
yield 2
print("Tiếp tục từ yield thứ hai.")
gen = simple_yield()
print(next(gen)) # In ra: 1
print(next(gen)) # In ra: 2
Bạn có thể sử dụng yield để tạo ra iterators (bộ lặp). Khi sử dụng yield trong một hàm, hàm đó trở thành một generator object, và bạn có thể sử dụng nó để lặp qua chuỗi giá trị. Ví dụ như: Tạo một iterator sử dụng yield
def fibonacci_sequence(n):
a, b = 0, 1
count = 0
while count < n:
yield a
a, b = b, a + b
count += 1
# Khởi tạo iterator (generator object)
fib_gen = fibonacci_sequence(10)
# Lặp qua các giá trị trong iterator
for num in fib_gen:
print(num)
Khi chạy chương trình trên, sẽ in ra 10 số đầu tiên trong dãy Fibonacci một cách tuần tự.
Lợi ích của việc sử dụng iterators với yield:
Như vậy, ICANTECH đã cùng bạn tìm hiểu tổng quan về yield trong Python cũng như tầm quan trọng và ưu điểm của nó. Hi vọng bạn sẽ áp dụng các kiến thức trên để tối ưu cho công việc của mình.
Cảm ơn bạn đã đọc bài viết, nếu bạn đang quan tâm đến học lập trình thì hãy tham khảo ngay các khóa học lập trình dưới đây tại ICANTECH nhé
Nguồn ảnh: ICANTECH.