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

מתוך המכלול, האנציקלופדיה היהודית
גרסה מ־02:52, 3 בפברואר 2020 מאת שלמה המלך (שיחה | תרומות) (ייבוא מוויקיפדיה העברית, ראה רשימת התורמים)
(הבדל) → הגרסה הקודמת | הגרסה האחרונה (הבדל) | הגרסה הבאה ← (הבדל)
קפיצה לניווט קפיצה לחיפוש

בשפות תכנות, פונקציה מחוללת שלרוב נקראת 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)
הערך באדיבות ויקיפדיה העברית, קרדיט,
רשימת התורמים
רישיון cc-by-sa 3.0


שגיאות פרמטריות בתבנית:מיון ויקיפדיה

שימוש בפרמטרים מיושנים [ דרגה ]
פונקציה מחוללת25570048