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

Từ khóa Yield trong Python: Hướng dẫn

Cách dùng từ khóa Yield trong Python

Generator không phải khái niệm trực quan nhất Python. Làm tình hình tệ hơn, chúng dùng từ khóa đặc biệt "yield", dù generator chính là hàm. Từ khóa yield là gì? Nó so sánh với câu lệnh return như thế nào?

Đó là câu hỏi hay. Trong hướng dẫn này, nói về câu lệnh yield là gì và cách dùng trong mã. Chúng ta đi qua ví dụ yield thực tế. Hãy bắt đầu!

Chúng ta khuyên đọc bài về iterator và generator Python trước. Điều này cho ngữ cảnh hữu ích để hiểu sâu hơn yield.

Quay lại cơ bản: Iterator và Generator

List mô tả là đối tượng lặp (iterable). Vì bạn xem nội dung dùng vòng "for". Mỗi lần vòng lặp thực thi, mục trong list được Python truy cập. Dictionary, tuple, chuỗi cũng là đối tượng lặp.

Hàm truy cập mục từ đối tượng lặp gọi là iterator. Hãy tạo list và lặp qua nó dùng for:

peppers = ["Scotch Bonnet", "Piri Piri", "Cayenne"] for p in peppers: print(p) for p in peppers: print(p)

Mã in tất cả ớt trong list "peppers" ra console:

Scotch Bonnet Piri Piri Cayenne Scotch Bonnet Piri Piri Cayenne

Chúng ta dùng iterator bao nhiêu lần tùy ý. Ví dụ cuối, lặp "peppers" hai lần.

Generator Python giống iterator lặp đối tượng. Có một khác biệt lớn: Chỉ lặp qua generator một lần. Trong khi lặp "peppers" bao nhiêu lần muốn, generator chỉ truy cập một lần.

81% người tham gia cho biết họ cảm thấy tự tin hơn về cơ hội việc làm công nghệ sau khi tham gia bootcamp. Được ghép nối với bootcamp ngay hôm nay.

Sinh viên trung bình tốt nghiệp bootcamp mất chưa đến sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được việc đầu tiên.

Hãy định nghĩa generator cho list ớt:

def print_peppers(peppers): for p in peppers: yield p peppers = ["Scotch Bonnet", "Piri Piri", "Cayenne"] pepper_generator = print_peppers(peppers) for p in pepper_generator: print(p)

Chúng ta định nghĩa hàm print_peppers(). Đây là hàm generator. Chấp nhận một đối số: list ớt muốn in ra console.

Trong chương trình chính, gọi print_peppers() gán cho biến pepper_generator. Tiếp theo, lặp qua generator dùng "for". Vòng for gọi đối tượng generator và lặp qua nó.

Hãy chạy mã:

Scotch Bonnet Piri Piri Cayenne

Đầu ra giống ví dụ đầu. Khác biệt là chỉ lặp list một lần. Hãy thử lặp generator lại:

... for p in pepper_generator: print(p) for p in pepper_generator: print(p)

Mã trả về:

Scotch Bonnet Piri Piri Cayenne

Chúng ta lặp generator một lần. Không làm lại. Đó là lý do vòng for thứ hai không trả giá trị.

Từ khóa Yield Python

Chú ý từ "yield" ví dụ trước. Nhắc lại:

def print_peppers(peppers): for p in peppers: yield p

Từ khóa "yield" xuất hiện bên trong hàm. Nó trả về giá trị trong hàm generator. Giống từ khóa "return".

Dùng yield khi muốn tạo generator lặp qua. Ví dụ trước, dùng yield tạo generator cho list ớt.

Bất kỳ hàm chứa yield trả về generator. Ta thấy bằng kiểm tra kiểu pepper_generator dùng type():

<class 'generator'>

Cho biết pepper_generator, gán hàm print_peppers, là generator.

Kết luận

Từ khóa yield trả về giá trị bên trong generator. Generator là iterator đặc biệt giá trị chỉ lặp qua một lần. Từ khóa yield giống câu lệnh return trừ return không dùng trong generator.

Bây giờ bạn đã sẵn sàng dùng từ khóa yield như Pythonista!