return: Thoát hàm ngay lập tức, trả về một giá trị đơn cho caller.
Return - Fruitful Functions
def sum(a, b):
return a + b
print(sum(5, 16)) # 21
Generator & Yield
Generator là iterator sinh giá trị trên yêu cầu (lazy evaluation), không lưu toàn bộ trong bộ nhớ.
Generator Expression
mygenerator = (x*x for x in range(4))
for i in mygenerator:
print(i, end=' ') # 0 1 4 9
# Không thể lặp lại lần 2
Yield - Tạo generator function
def createGenerator():
for i in range(4):
yield i * i
mygenerator = createGenerator()
print(mygenerator) #
print(next(mygenerator)) # 0
print(next(mygenerator)) # 1
print(next(mygenerator)) # 4
print(next(mygenerator)) # 9
print(next(mygenerator)) # StopIteration exception
So sánh
| Đặc điểm | return | yield |
|---|---|---|
| Trả về | Giá trị đơn | Generator object |
| Trạng thái hàm | Kết thúc | Tạm dừng, giữ trạng thái |
| Bộ nhớ | Tất cả giá trị cùng lúc | Sinh từng giá trị (lazy) |
| Lặp lại | Không áp dụng | Chỉ 1 lần (exhaustible) |
Dùng yield khi: Xử lý dữ liệu lớn, stream, pipeline, vô hạn sequence.