פונקציה מחוללת

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה לניווט קפיצה לחיפוש

בשפות תכנות, פונקציה מחוללת שלרוב נקראת Generator Function (או Generator) היא פונקציה שדרכה ניתן לשלוט באיטרציה של לולאה. למעשה כל פונקציה מחוללת היא איטרטור. קריאה לפונקציה מחוללת מחזירה אובייקט המשמש כאיטרטור. בפונקציות מחוללות הערכים מוחזרים בעזרת שימוש במילה yield. בקריאה ראשונה לאובייקט מוחזר הערך שמופיע בביטוי yield, ובכל קריאה נוספת הפונקציה ממשיכה מהמקום בו היא הפסיקה. כאשר הפונקציה "חוזרת" (בעזרת return או כשמגיעים לקצה שלה), נזרקת חריגה.

השימוש הפשוט ביותר בפונקציה מחוללת הוא בלולאת for, אשר מקדמת כל פעם את האיטרטור (למשל, זה שנוצר בפונקציה המחוללת range) בעזרת הפקודה ()next, ולוכדת את החריגה באופן 'שקט' בסוף הלולאה.

היתרון בפונקציות מחוללות הוא שלמשל בניגוד לפונקציה שמחזירה טיפוס list או מערך כלשהו, אין צורך לחכות לכל האינדקסים שיתמלאו בערכים שהפונקציה מחזירה, וניתן להשתמש בערכים שמתקבלים טרם הושלמה פעולתה של הפונקציה המחוללת.

דוגמאות לפונקציות מחוללות[עריכת קוד מקור | עריכה]

להלן דוגמת קוד לפונקציה מחוללת המחזירה אובייקט המשמש כאיטרטור לסדרת פיבונאצ'י עד האיבר ה־n. ניתן לשים לב לכך שההבדל בינה לבין פונקציה רגילה המחשבת את האיבר ה־n הוא קטן ביותר:

def fib(n):
 a, b = 0, 1
 for i in range(n):
 a, b = b, a + b
 yield a

על מנת להדפיס את מספרי פיבונאצ'י הראשון עד ה־15 ניתן להשתמש בלולאת for פשוטה:

for i in fib(15):
 print(i)