yield ใช้ใน Generator เพื่อทำความเข้าใจพฤติกรรม เริ่มจากดู Iterables ก่อน: Python Objects เช่น List, File, String เรียกว่า Iterables Object ใดๆ ที่วนลูปด้วย for ... in ได้ คือ Iterable Iterator Object ก็เป็น Iterable แต่ Iterate ได้เพียงครั้งเดียว ได้ Iterator จาก Iterable ด้วย iter() มีเมธอด next() สำหรับ Iterate
>>> L1 = [1,2,3,4] >>> I1 = iter(L1) >>> while True: ... try: ... print(next(I1)) ... except StopIteration: ... break
Generator คล้าย Function แต่ Yield ค่าต่อเนื่องใน Iterator ด้วย yield
เมื่อเรียก Generator Function จะคืน Iterator Object ทันที ยังไม่เริ่ม Execute Function เมื่อเรียก next() ครั้งแรก Function เริ่มรันจนถึง yield คืนค่า Yielded yield จำตำแหน่งการ Execute ไว้ เรียก next() ครั้งที่ 2 จะต่อจากค่าก่อนหน้า
ตัวอย่าง: Fibonacci Series Generator
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:
break