הפונקציה itertools.zip_longest

היי,
יש לי שאלת הבנה על הפונקציה itertools.zip_longest, בכוונה לא ציינתי את שם התרגיל כדי לא לעשות ספוילרים.
ממה שקראתי על הפונקציה היא מחזירה איטרטור. נגיד שאני משתמש בפונקציה בגנרטור, ובאמצעות לולאת for, מבצע yield על כל טאפל מהאיטרטור, כך:
for tup in zip_longest_iterator:
for i in tup:
yield i
האם הפונקציה מסיימת לרוץ על כל הערכים שהועברו לה ורק לאחר מכן מוחזר כל האיטרטור?
אם כך, הגנרטור הזה בעצם לא מממש את האפשרות בגנרטורים להחזיר את הערכים בזמן אמת? (ואז כשיועברו הרבה ערכים לפונקציה היא תקרוס?)
קצת מבולבל, אשמח לעזרה :slight_smile:

היי, אנסה לעשות סדר (ומקווה שלא אעשה יותר בלאגן!).
הפונקציה zip_longest מחזירה בכל פעם tuple עם הערכים במקום x בכל iterable כאשר:
len(longest_iterable) > x > 0.
כשאתה מפעיל פונקציות ממודול itertools הן למעשה גנרטור של ערכים. כשאתה עושה for על איטרטור כזה, כל מופע יהיה מה שיחזור מהפונקציה ב-yield. במקרה הזה - ככתוב מעלה.
הסדר הוא - מתקבל הערך הראשון מהפונקציה zip_longest, ואתה שולח את i והפונקציה עוצרת. כשהאיטרטור בקוד יחזור לפונקציה שלך, ישלף האיבר השני בטאפל.

ובכן, zip_longest הוא פשוט zip שלמדנו במחברות קודמות, רק שאם אחד ה־iterators קצר יותר מהאחרים, zip_longest ימלא בו ערכים כדי שה־zip ימשך לפי ה־iterable הארוך ביותר