MACHINE-GUN פורסם 2014 בפברואר 25 Share פורסם 2014 בפברואר 25 שלום.כאשר אני יוצר מחלקה ובתוכה הגדרתי init עם מילון ריקאז כאשר אני יוצר 2 מופעים חדשים ,אני מצפה שמילון 1 ישאר כמו שהוא, ומילון 2 יהיה משהו בנפרד,אך הוא מערבב מילון 1, עם מילון של 2 (ואפילו דורס את הקיים )...דרישות: mutable. איפה הבעייה ?https://www.dropbox.com/s/v705ft1qqbg0rw4/vec.py קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2014 בפברואר 25 Share פורסם 2014 בפברואר 25 ב-init הגדרת את הפרמטר עם הערך הדיפולטי {}=dic. הקומפיילר לא יוצר את הערך הדיפולטי כל פעם שאתה קורא לפונקציה, אלא רק פעם אחת ברגע שהגדרת אותה. כל פעם שאתה קורא ל-init בלי פרמטר, הוא שם ב-dic את המילון הזה, ככה שלכל האובייקטים שנוצרים כך יש את אותו מילון.אתה יכול לעשות משהו כזה במקום:def __init__(self,dic=None): if dic is None: dic = {} self.dic = dic קישור לתוכן שתף באתרים אחרים More sharing options...
Zelig פורסם 2014 בפברואר 25 Share פורסם 2014 בפברואר 25 אויש. אני זוכר כשנפלתי על זה בפעם הראשונה. חשבתי שאני יוצא מדעתי... למען הבהירות, זה נכון לכל פונקציה ולכל פרמטר דיפולטי, לא רק init. וכל טיפוס mutable, לא רק מילון (לדוגמא רשימה ריקה [] ). קישור לתוכן שתף באתרים אחרים More sharing options...
MACHINE-GUN פורסם 2014 בפברואר 25 מחבר Share פורסם 2014 בפברואר 25 יש, סוף סוף.... זה עובד כמו גדול..ממש עזרת לי להבין , ולהצליח...וגם תודה ל ZELLIG על חידוד בעניין הפונקציות וכו'.. קישור לתוכן שתף באתרים אחרים More sharing options...
Gil28 פורסם 2014 בפברואר 25 Share פורסם 2014 בפברואר 25 if dic is None מתפרש בקלות גם כ:if not dicובהתאם if dic בודק אם הוא לא ריק. קישור לתוכן שתף באתרים אחרים More sharing options...
Zelig פורסם 2014 בפברואר 27 Share פורסם 2014 בפברואר 27 זהירות, כי if not dlc יעבוד גם על מילון ריק, מה שעלול להחליף את המליון בצורה שתפתיע את המשתמש:class X: def __init__(self, adict=None): if not adict: adict = {} self.adict = adictx1 = X(mydict)# obviousy x1.adict is a new emtpy dict, as expectedmydict = {1:'one'}x2 = X(mydict)# as expected, x2.adict is mydict, therefore it contains has key 1 with value 'one'mydict = {}x3 = X(mydict)mydict[1] = 'one'# OOPS! x3.adict is NOT mydict! x3.adict is still empty!אם תשתמש ב- if mydict is None אז הדוגמא השלישית תעבוד נכון קישור לתוכן שתף באתרים אחרים More sharing options...
MACHINE-GUN פורסם 2014 בפברואר 27 מחבר Share פורסם 2014 בפברואר 27 השתמשתי לבסוף במה ש "שניצל " אמר , והחכמתי מדיבריכם קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.