בשפות תכנות, פונקציה מחוללת שלרוב נקראת Generator Function (או Generator) היא פונקציה שדרכה ניתן לשלוט באיטרציה של לולאה. למעשה כל פונקציה מחוללת היא איטרטור. קריאה לפונקציה מחוללת מחזירה אובייקט המשמש כאיטרטור. בפונקציות מחוללות הערכים מוחזרים אחד אחד: בכל קריאה לאובייקט מוחזר ערך אחד, ובקריאה נוספת הפונקציה ממשיכה מהמקום בו היא הפסיקה עד שהיא מחזירה ערך נוסף. האיטרציה ממשיכה עד שהפונקציה מפסיקה להחזיר ערכים.
היתרון בפונקציות מחוללות הוא שבניגוד לפונקציה שמחזירה מערך או אוסף של ערכים, אין צורך לחכות שהפונקציה תסיים לרוץ ותחזיר את כל הערכים שחושבו, אלא ניתן להשתמש בערכים שמתקבלים טרם הושלמה פעולתה של הפונקציה המחוללת. דבר זה מעניק את השליטה באיטרציה למי שקורא לפונקציה, וכך ניתן לעצור מוקדם או לעשות חישוב רק בעת הצורך.
דוגמאות לפונקציות מחוללות
להלן דוגמת קוד לפונקציה מחוללת בפייתון המחזירה אובייקט המשמש כאיטרטור לסדרת פיבונאצ'י עד האיבר ה־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)