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 משנה את הערך שעליו מצביע הקישור, כך שכל שם אחר המצביע על אותו ערך רואה את השינוי.