2.2. משתנים וטיפוסים בסיסיים¶
משתנה הוא שם שאתה מקשר לערך באמצעות האופרטור =. לאחר ההשמה, ניתן להשתמש בשם בכל מקום שבו ניתן להשתמש בערך:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
הצד הימני של = מוערך תחילה, ואז התוצאה מקושרת לשם שמשמאל. קריאת שם שמעולם לא הושם מעלה NameError.
משתנה הוא רק תווית. הוא מצביע על ערך – הערך חי במקום אחר, ולאותו ערך יכול להיות כל מספר של תוויות.
משתנים הם תוויות המצביעות על ערכים. השמה מחדש של משתנה מזיזה את התווית; היא לא משנה את הערך שעליו התווית הצביעה קודם.¶
2.2.1. כללי שמות¶
שמות מתחילים באות או בקו תחתון ועשויים להכיל אותיות, ספרות וקווים תחתונים.
frame_countו-_internalבסדר;1st_frameהיא שגיאת תחביר.שמות רגישים לאותיות גדולות/קטנות:
Widthו-widthהם שני משתנים שונים.הימנע משימוש חוזר בשמות מובנים כמו
list,str,id(), אוprint()– הסתרתם אינה מעלה שגיאה, אך הפונקציה המובנית המקורית הופכת בלתי נגישה לשארית הסקריפט.מוסכמה:
snake_caseעבור משתנים ופונקציות,ALL_CAPSעבור קבועים שאינך מתכוון לשנות,CamelCaseעבור שמות מחלקות.
2.2.2. טיפוסים בסיסיים¶
לכל ערך ב-Python יש טיפוס הקובע אילו פעולות הוא תומך. ארבעת הטיפוסים שתכתוב הכי הרבה הם:
int – מספרים שלמים, חיוביים או שליליים. מספרים שלמים ב-MicroPython גדלים עד כמה שהזיכרון מאפשר. ליטרלים נכתבים כספרות פשוטות:
0,42,-7. גם ליטרלים הקסדצימליים (0x1A), אוקטליים (0o17) ובינאריים (0b1010) תקפים ושימושיים לאוגרים ולמסכות סיביות.float – מספרים עם נקודה עשרונית או מעריך:
3.14,1.0,-0.5,2e6(= 2,000,000.0). כל ה-float במצלמה הם IEEE 754 ברוחב 32 סיביות – מדויקים עד כשבע ספרות משמעותיות.bool – אחד משני הליטרלים
TrueאוFalse(שים לב לאות הגדולה).str – טקסט, נכתב כתווים בין מרכאות בודדות או כפולות:
"hello",'OpenMV'. שני סגנונות המרכאות שקולים; בחר את זה שמאפשר לך להימנע מהבריחה (escaping) של תווי המרכאות המופיעים בתוך המחרוזת.
ישנו גם ערך חמישי ששווה להכיר מיד:
None – הערך היחיד מטיפוס
NoneType. משמש לציון ”אין ערך“ או ”לא נקבע עדיין“. פונקציות שאינן מחזירות דבר במפורש מחזירות באופן מובלעNone.
2.2.3. בדיקת טיפוסים והמרתם¶
הפונקציה המובנית type() מחזירה את הטיפוס של כל ערך:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
כל טיפוס משמש גם כפונקציית המרה. מסור לו ערך מטיפוס אחר ותקבל בחזרה את הערך השקול בטיפוס החדש – כאשר ההמרה מוגדרת היטב:
>>> int("42")
42
>>> int(3.9)
3 # truncates toward zero, not rounds
>>> float("1.5")
1.5
>>> str(255)
'255'
>>> bool(0), bool(1), bool("")
(False, True, False)
המרות שאינן מוגדרות היטב מעלות ValueError:
>>> int("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10
2.2.4. השמה מחדש וטיפוסיות דינמית¶
ניתן לבצע השמה מחדש של שם לערך מכל טיפוס בכל עת. הבא חוקי:
x = 42
x = "now I'm a string"
x = 3.14
Python אינה מקשרת משתנה לטיפוס. קוד התלוי בכך ש-x הוא מספר שלם פשוט מצפה למספר שלם בנקודה שבה הוא משתמש בו; אם הוא מקבל משהו אחר, אתה מקבל TypeError בזמן ריצה.
הערה
השמה מחדש של x אינה משנה את הערך שעליו הצביע הקישור הישן. אם שני שמות חולקים את אותו ערך, השמה מחדש של אחד אינה משפיעה על השני:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
שינוי (mutation) של ערך משותף שונה: מתודה כמו list.append משנה את הערך שעליו מצביע הקישור, כך שכל שם אחר המצביע על אותו ערך רואה את השינוי.