יום שישי, 16 בדצמבר 2022

Mutable Default Argument - [פייתון]

אם אתם חדשים עם פייתון יתכן ויום יבוא ותיפלו בענין הזה. למזלכם אם תקראו את הפוסט הזה אתם מסודרים :)  


קחו את הקוד הבא כדוגמה:


בנינו פונקציה לא חכמה (ואף מיותרת, אבל היי, זו דוגמה לצורך הדוגמה, אז סלחו לי) שמקבלת value חדש לרשימה שאיתחלנו בברירת המחדל כ empty list 

בהרצה הראשונה של הפונקציה קיבלו את התוצאה הצפויה, הערך שהעברנו נכנס לתוך הרשימה הריקה (לא העברנו ערך של רשימה ולכן פייתון השתמשה בערך ברירת המחדל של רשימה ריקה). 

החיים שלנו תותים? אולי, אבל השארו עימי, העלילה מסתבכת, מה לדעתכם התשובה של פקודה 126 שבתמונה. 

אתם אולי עונים שנקבל את הערך ['second'] הרי לא העברנו רשימה ולכן הפונקציה אמורה להשתמש ברשימה ריקה שבדפולט. 

ובכן, לא כך הדבר, הנה תראו: 



אבוי, פייטון הוסיפה לערך המקורי WTF?  

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

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


כמו שקל ליפול כאן, קל גם להמנע. 


אין תגובות:

הוסף רשומת תגובה