Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách hàm Python return/yield objects (return vs yield vs generator)

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ểmreturnyield
Trả vềGiá trị đơnGenerator object
Trạng thái hàmKết thúcTạm dừng, giữ trạng thái
Bộ nhớTất cả giá trị cùng lúcSinh từng giá trị (lazy)
Lặp lạiKhông áp dụngChỉ 1 lần (exhaustible)

Dùng yield khi: Xử lý dữ liệu lớn, stream, pipeline, vô hạn sequence.