Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

คีย์เวิร์ด "yield" ทำอะไรใน Python


คำหลักผลตอบแทนใช้ในเครื่องกำเนิด เพื่อให้เข้าใจถึงพฤติกรรมของมัน ให้เราดูก่อนว่าสิ่งที่ทำซ้ำได้คืออะไร รายการอ็อบเจ็กต์ 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()