עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

פייתון - שימוש ב yield

Featured Replies

פורסם

שלום ,

כחלק מתרגיל אני אמור לממש פונקציה שמקבלת פונקציה ומחזירה פונקציה אחרת שמשמשת כ- iterator.

כלומר על הפלט אמור להיות : 0,2,4,6,8,10 וכו עבור הקוד.

כמובן שהמשימה היא לכתוב את הפונקציה make_iterator.

אך הפלט שיוצא לי הוא : <generator object some_f at 0x00000000025561F8>

אשמח להסבר מעמיק יותר איך עובד ה yield (להבנתי זה return רק שבקריאה הבאה לפונקציה היא תמשיך מאותו המקום והמשתנים יישמורו, לא?)


fn=lambda n: 2*n
def Make_iterator(fn):

def some_f():
j=0
yield fn(j)
j+=1

return some_f




iterator = Make_iterator(fn)
for i in range(4):
print(iterator())

for i in range(2,4):
print(iterator())


פורסם

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

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

באמצעות ה-next הזה אתה יכול להשתמש בגנרטור בתוך לולאת for (ככה שאתה לא באמת צריך לקרוא ל-next בעצמך), כמו שעושים עם range.

אני מציע לך לנסות לכתוב את הקוד הזה ב-python shell ותראה מה יקרה:


def f():
for i in range(5):
yield i*2

g = f()
next(g)
next(g)
next(g)
for x in range(f()):
print(x)

שחק עם זה קצת ותראה מה עוד קורה כל פעם שאתה קורא ל-f.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.