Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Bộ phát sinh
Tiến trình thủ công một Generator
Mục tiêu
Sử dụng generator trong một chuỗi thủ công để kết hợp và sản xuất các nguyên liệu làm bánh mì.
Phía trước có một cơ sở nơi bạn có thể tạo ra một số bột bánh mì bằng cách sử dụng các máy dập. Thông thường, bạn sẽ sử dụng hàm combine() để kết hợp các nguyên liệu nhưng đây không phải trường hợp này, các nguyên liệu cần được tinh chỉnh trước khi có thể được kết hợp.
Đối với công việc này, chúng ta có thể sử dụng các generator vì chúng có thể được tùy chỉnh để xuất các loại tệp khác nhau cũng như có thể được gọi theo lệnh thay vì tự động xuất như các hàm và vòng lặp. Đây là một ví dụ:
def bread():
yield 5
yield "grain"
Mã trên có một generator với hai lệnh yield, một trong số đó tạo ra một số thực và một cái khác là một chuỗi. Chúng ta có thể tạo giá trị của generator theo ý muốn bằng cách sử dụng hàm next(). Như sau:
recipe = bread() # Thiết lập Generator player.place(next(recipe)) # Gọi giá trị đầu tiên player.collect(next(recipe)) # Gọi giá trị thứ hai
Trong ví dụ trên, generator được thiết lập và hàm next() được sử dụng với generator để gọi giá trị yield đầu tiên cho việc sử dụng trong một hàm place(). Điều này được lặp lại với giá trị thứ hai nhưng thay vào đó được sử dụng trong một hàm collect(). Điều này giúp dễ dàng gọi các giá trị của các loại khác nhau trong một trình tự mà không cần phải sử dụng nhiều danh sách hoặc biến.
Một generator có tên bread() sẽ được định nghĩa trong trình chỉnh sửa mã nhưng nó sẽ yêu cầu các số lượng cho mỗi nguyên liệu để bạn có thể tinh chỉnh bột bánh mì. Những con số này được viết trên biển hiệu bên cạnh cơ sở. Thiết lập generator để sử dụng bằng cách tham chiếu nó, như sau: recipe = bread()
Đầu tiên đi đến dấu X sáng bên cạnh bể sữa và collect() phần cuối cùng của sữa trong bể bằng cách sử dụng hàm next() của generator, như sau: player.collect(next(recipe)). Sau đó đi đến dấu X vàng bên cạnh biển hiệu và sử dụng hàm speak() để nhận số lượng cần thiết cho generator để sản xuất bánh mì và ghi chúng xuống generator. Dữ liệu được lưu trữ trong một hằng số có tên là "sign" và sẽ được gọi như sau: player.speak(sign).
Khi tất cả các giá trị đã được nhập vào generator, hãy vào cơ sở và sử dụng player.place(next(recipe)) trên các dấu X tối và player.collect(next(recipe)) trên các dấu X sáng để hoàn thành cấp độ.