Menu
Coddy logo textTech

ביטויי מחולל

שיעור 9 מתוך 13 בקורס איטרטורים ב-Python של Coddy.

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

תחביר של ביטויי גנרטור

ביטויי גנרטור משתמשים בתחביר דומה לזה של ביטויי רשימה, אך עם סוגריים עגולים במקום סוגריים מרובעים:

(expression for item in iterable if condition)

תכונות עיקריות

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

דוגמה לשימוש

הנה דוגמה פשוטה לביטוי גנרטור שמפיק מספרים בריבוע:

squares = (x**2 for x in range(5))
for square in squares:
    print(square)  # פלט: 0, 1, 4, 9, 16

השוואה לביטויי רשימה

אף שהתחביר דומה, ביטויי גנרטור נבדלים מביטויי רשימה מבחינת השימוש בזיכרון:

# הבנת רשימה (יוצרת רשימה מלאה בזיכרון)
squares_list = [x**2 for x in range(1000000)]

# ביטוי גנרטור (יוצר אובייקט גנרטור)
squares_gen = (x**2 for x in range(1000000))

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

מקרי שימוש

ביטויי גנרטור שימושיים במיוחד כאשר:

  • עובדים עם מערכי נתונים גדולים
  • מעבדים זרמי נתונים
  • יוצרים צינורות נתונים

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

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

challenge icon

אתגר

קל

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

הנתונים הבאים ניתנים לכם:

  • שני מספרים שלמים כקלט: start ו-end (כולל)

המשימה שלכם:

  1. ליצור ביטוי מחולל ש:
    • עובר על הטווח מ-start עד end (כולל)
    • מסנן את המספרים האי-זוגיים
    • מעלה בריבוע את המספרים הזוגיים שנותרו
  2. להשתמש בביטוי המחולל בלולאה כדי להדפיס כל ערך שמתקבל בשורה חדשה

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

נסו בעצמכם

# קראו את הקלט
start, end = map(int, input().split())

# TODO: צרו כאן את ביטוי הגנרטור שלכם
generator_exp = None  # החליפו את None בביטוי הגנרטור שלכם

# הדפיסו את התוצאות
for value in generator_exp:
    print(value)

כל השיעורים ביחידה איטרטורים ב-Python

תרגלו בעצמכם: קומפיילר Python אונליין