
namedtuple עם שם הטיפוס ורשימת השדות, כמחרוזת מופרדת ברווחים או כרשימה. בדוגמה נוצר טיפוס בשם MyData עם השדות First Name, Last Name ו-Age.john.first_name, ולא בסוגריים כמו במילון.count ו-index.הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על namedtuple» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בתיאור הזה נדבר על Named טאפל. אז Named טאפל מאוד מזכיר לנו טאפל. טאפל זה, להזכירכם, זה מבנה נתונים אימיוטיבל, כלומר, ברגע שאני עוצר אותו הוא לא ניתן לשינוי, אבל הוא כמו ליסט, כלומר, האינדקסים שלו הם מספרים רצים, 0 עד האורך שלו.
לעומת זאת, מהשם Named טאפל, אתם יכולים להבין שמדובר במשהו שיש לו name, כלומר הוא טאפל, אבל שאפשר לגשת אליו לא בעזרת מספרים, בעזרת שמות יותר משמעותיים.
בואו נתחיל בליצור איזשהו name-taple כלשהו. ה-ID כבר הכניס לנו אותו. עכשיו, הדרך לעבוד עם name-taple היא קצת שונה מדרך סטנדרטית של נתונים אחרים בפייתר.
הדרך ליצור name-taple היא שונה מדרך יצירה של אובייקטים אחרים, כי אנחנו בעצם יוצרים פה משהו שהוא מלכתחילה נוצר בצורה מסוימת. כלומר, מצד אחד הוא דומה ל-dictionary, כי ניגשים אליו בעזרת אובייקט, בעזרת KeyValue.
מצד שני הוא טאפל, הוא לא ניתן לשינוי לאחר מכן. אז הדרך, בואו קודם כל נראה איך יוצרים name טאפל. אז הפונקציה name טאפל מקבלת שני פרמטרים או יותר.
רק השתיים הראשונים הם חשובים ורק עליהם אנחנו נדבר. הטייפ ניים זה בעצם השם של הטאפל, אפשר לקרוא לו mydata, שזה בעצם השם שלו ואנחנו תכף נראה איפה הוא מופיע.
וה-Field Names יכול להיות או סטרינג עם השמות של הערכים מופרדים ב-Space או ליסט של סטרינגים, זה לא באמת משנה. בואו ניצור איזשהו My Data ונשמור שם את ה-First Name, ה-Last Name ואת ה-H.
שימו לב, יש לי פה שלושה ערכים בסטרינג אחד שמופרדים על ידי Space. לאחר מכן, אם אני רוצה ליצור Name טאפל, מה שאני עושה זה כזה דבר. אז כדי ליצור Name טאפל עושים כזה דבר.
אני עכשיו רוצה ליצור מופע חדש מסוג של הניים טאפל איי. בואו ניתן לו שם קצת יותר משמעותי. נקרא לו, בואו ניתן פה קצת שמות יותר, נגיד ג'ון.
ואנחנו בעצם אומרים שאנחנו רוצים עכשיו ליצור סוג חדש, לא ג'ון פרסון, כבר יותר טוב.
ואנחנו רוצים עכשיו ליצור ניו פרסון, ובואו נגדיר מה יש בו. אז ג'ון שווה פרסון. פה בעצם אנחנו נותנים את הערכים של ה-First Name, Last Name ו-Age.
אז ג'ון סמית והערך והגיש שלו הוא 40 נגיד. ואז פרינט ג'ון, בואו נריץ ונראה מה אנחנו רואים פה. שימו לב, באנו פה My Data שבמקום First Name יש Json, Last Name סמית ו-Age הוא 40. כמו שהבטחתי לכם, אז הערכים פה הם נגישים כמו דיקשנרי, בעצם עם נקודה.
למשל אם נרצה להדפיס את השם של ג'ייסון את השם של ג'ון כל מה שצריך לעשות זה פרינט ג'ון נקודה פרסט ניים בעצם אנחנו אנחנו רואים שאנחנו ניגשים לזה לא כמו סטרינג כלומר לא בסוגריים כמו בדיקשנרי כלומר אם אני אנסה לגשת אל האובייקט הזה ככה אני לא אצליח כי הוא לא הוא לא יעבוד אז הדרך בעצם להוציא מידע מתוך האובייקט הזה היא שימוש נקודה אפשר גם
להוציא last name, או את ה-age, לא משנה. בעצם, מה היתרונות של המבנה הזה? דבר ראשון, לשים לב שבהדפסות אז my data מופיע פה במזהה שלו.
אז כלומר, הפרמטר הראשון לפונקציה name טאפל מלווה אותנו לכל אורך הטייפ הזה. מבחינת יתרונות וחסרונות, אז חסרונות הם, אני לא יודע אם זה חסרונות, דבר ראשון, אי אפשר לשנות אותו.
אז אם ננסה לעשות john.age=4, נקבל שגיאה. כי זה טאפל, כלומר זה name טאפל, הוא אימיוטבל, הוא לא ניתן לשינוי. זה אומר שהוא חוסך לנו מבחינת מקום, הוא לוקח פחות מקום בזיכרון, הוא מאוד טוב להחזרת ערכים מפונקציות, אם רוצים להחזיר פונקציה שיש לה שדות לא אינדקסים
אלא שמות משמעותיים, למשל אחד המודולים שמשתמש בname טאפל זה sqlite3 בפייתון שהוא מחזיר ערכים, שהוא מחזיר שורות מטבלאות בsql, כדי לזהות את העמודות אז אין לנו שם זה לא מספר במספרים של אינדקסים רוצים אלא בשם של עמודה בטבלת sql אז הדרך לגשת היא