คำหลักผลตอบแทนใช้ในเครื่องกำเนิด เพื่อให้เข้าใจถึงพฤติกรรมของมัน ให้เราดูก่อนว่าสิ่งที่ทำซ้ำได้คืออะไร รายการอ็อบเจ็กต์ Python ไฟล์ สตริง ฯลฯ เรียกว่า iterables ออบเจ็กต์ใด ๆ ที่สามารถข้ามผ่านโดยใช้ for .. ในรูปแบบวากยสัมพันธ์สามารถทำซ้ำได้ วัตถุ Iterator ยังสามารถทำซ้ำได้ แต่สามารถทำซ้ำได้เพียงครั้งเดียว สามารถรับวัตถุ Iterator จากรูปแบบ iterable ใดก็ได้โดยใช้ฟังก์ชัน iter() และมีเมธอด next() ซึ่งใช้การวนซ้ำ
>>> L1 = [1,2,3,4] >>> I1 = iter(L1) >>> while True: try: print (next(I1)) except StopIteration: sys.exit()
ตัวสร้างดูเหมือนกับฟังก์ชัน แต่ให้ผลลัพธ์ที่ต่อเนื่องกันในตัววนซ้ำโดยใช้คีย์เวิร์ดของผลตอบแทน
เมื่อมีการเรียกฟังก์ชันตัวสร้าง มันจะส่งคืนอ็อบเจ็กต์ iterator โดยไม่ได้เริ่มการทำงานของฟังก์ชันด้วยซ้ำ เมื่อเรียกใช้เมธอด next() เป็นครั้งแรก ฟังก์ชันจะเริ่มดำเนินการจนกว่าจะถึงคำสั่งผลตอบแทน ซึ่งจะคืนค่าที่ได้กลับมา ผลตอบแทนจะติดตามเช่นจำการดำเนินการครั้งสุดท้ายและการเรียก next() ครั้งที่สองจะดำเนินต่อไปจากค่าก่อนหน้า
ตัวอย่างต่อไปนี้สร้างตัววนซ้ำที่มีตัวเลขในชุดฟีโบนักชี การเรียกใช้ฟังก์ชันตัวสร้าง fibo() แต่ละครั้งจะทำให้เกิดองค์ประกอบต่อเนื่องในชุดฟีโบนักชี
import sys def fibo(n): a,b=0,1 while True: if a>n : return yield a a, b = b, a+b f = fibo(20) while True: try: print (next(f)) except StopIteration: sys.exit()