דילוג לתוכן המרכזי
מודול 3 · שיעור 2 מתוך 410/36 בקורס~10 min
שיעורי מודול (2/4)

טופלים ופרוק

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

יצירת טופל

Python
vuota = ()
una = (42,)             # ATTENZIONE: senza virgola, (42) è solo 42 fra parentesi
coords = (10, 20)
mista = ("Ada", 36, True)

גישה לפי אינדקס וחיתוך פועלת בדיוק כמו עבור רשימות: coords[0], coords[-1], mista[:2].

מתי להשתמש בטופל במקום ברשימה

  • כאשר הערך מייצג אוסף קבוע שאסור לו להשתנות (קואורדינטות, תאריך כ-(year, month, day), גרסה (1, 2, 3)).
  • כאשר אתה צריך להשתמש בערך בתור מפתח מילון או כרכיב של a set: ניתן להשתמש רק באובייקטים בלתי ניתנים לשינוי (ניתנים לגיבוש).
  • כאשר אתה רוצה לאותת לקורא הקוד שהערך זה הוא "קפוא".

Unpacking: התכונה שמשנה את אופן הכתיבה של Python

Python
nome, anni = ("Ada", 36)
nome   # 'Ada'
anni   # 36

זה עובד גם ללא סוגריים (הפסיק הוא זה שמגדיר את טופל):

Python
x, y = 10, 20

והוא מאפשר החלפה ללא משתנה זמני, פייתון טהור ניב:

Python
a, b = 1, 2
a, b = b, a
a, b   # (2, 1)

פורקים עם * (מנוחה)

כאשר אתה רוצה ללכוד את "הראשון והשאר" או "הראשון, האחרון, האמצע":

Python
primo, *resto = [1, 2, 3, 4, 5]
primo   # 1
resto   # [2, 3, 4, 5]

primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro  # [2, 3, 4]

זה נקרא מקצה בכוכב: הכוכב אוסף את כל מה נשאר ברשימה.

מלכודת tuple אלמנט יחיד

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

Python
x = (42)
type(x)   # <class 'int'>
x = (42,)
type(x)   # <class 'tuple'>

טפולים עם אלמנט יחיד

כדי ליצור טופל המכיל רק אלמנט אחד, סוגריים בלבד אינם מספיקים: עליך להכניס פסיק נגרר, למשל t = (42,). ללא הפסיק, Python מתייחס לסוגריים כאל קיבוץ מתמטי פשוט, ויוצר מספר שלם רגיל 42.

נסה את זה

פעילות גופנית#python.m3.l2.e1
ניסיונות: 0טוען...

בהינתן `a = 1` ו-`b = 2`, החלף את הערכים שלהם בשורה אחת (פירוק tuple) והעריך את tuple (a, b).

טוען עורך...
הצג רמז

a, b = b, a

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#python.m3.l2.e2
ניסיונות: 0טוען...

מתוך הרשימה `voti = [7, 5, 8, 6, 9]`, השתמש ב- unpacking כדי לחלץ את כיתה א' ל'פרימו', את האחרונה ל'ultimo' ואת הנותרים ל'centro'. הערך `(primo, centro, ultimo)`.

טוען עורך...
הצג רמז

primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.

הפתרון זמין לאחר 3 ניסיונות

אתגר נוסף

פעילות גופנית#python.m3.l2.e3
ניסיונות: 0טוען...

Given the tuple `point = (4, 5, 6)`, use unpacking to assign the three values to the variables `x`, `y`, `z` respectively. Then, calculate the sum of `x`, `y`, and `z` and store it in `coord_sum`. Finally, evaluate `coord_sum`.

טוען עורך...
הצג רמז

השתמש ב-x, y, z = point כדי לחלץ את שלוש הקואורדינטות במשפט יחיד.

הפתרון זמין לאחר 3 ניסיונות