2.42. סיכום

עברתם דרך החלקים של Python שעולים שוב ושוב בעת כתיבת סקריפטים עבור ה-OpenMV Cam:

  • יסודות השפה – ערכים ומשתנים, אריתמטיקה והשוואה, מחרוזות ובייטים, ארבעת האוספים המרכזיים (list, tuple, dict, set), תנאים ולולאות, הגדרת פונקציות וניהול הארגומנטים והתחום (scope) שלהן, הגדרת מחלקות ושימוש בירושה, העלאה וטיפול בחריגות. אלו הם הלבנים שכל חלק אחר של Python בנוי מהן.

  • החלקים המבניים – פיצול קוד על פני מודולים וחבילות, ייבוא מה שצריך, קריאה וכתיבה של קבצים באמצעות with, החלפת נתונים מובנים דרך json, ואריזת רשומות בינאריות דרך struct עם סדר בייטים (endianness) ושדות מספרים שלמים ברוחב קבוע. אלו מופיעים ברגע שסקריפט גדל מעבר לקובץ יחיד או צריך לתקשר עם משהו מחוצה לו.

  • החלקים שמשנים צורה בסביבת ריצה מוגבלת – מדוע מספרי הנקודה הצפה (floats) של MicroPython הם 32 סיביות וכיצד להשוות ביניהם באופן אמין, כיצד אוסף הזבל (garbage collector) מחלק ומשחזר בלוקים, מדוע פרגמנטציה חשובה על ערימה (heap) קטנה, וכיצד הקצאה מראש שומרת על התנהגות טובה של סקריפטים ארוכי-ריצה. הרגלים משולחן העבודה לעיתים מטעים כאן; חומר זה נותן לכם את המודל המנטלי הנכון לקוד שחי על ההתקן.

  • כלי האינטרוספקציה והקוד הדינמיid(), hash(), isinstance(), issubclass(), callable(), globals(), locals() לצורך התבוננות בתוך ערכים והסביבה; eval() / exec() / compile() עבור המקרים הנדירים שבהם הפקת קוד בזמן ריצה היא התשובה הנכונה. רוב הסקריפטים לעולם אינם נוגעים בהם, אך הידיעה שהם קיימים (ומתי לא לפנות אליהם) היא חלק מקריאת ה-Python של אנשים אחרים.

  • התאמת תבניות על טקסט – המודול re עבור מחרוזות שאת צורתן ניתן לתאר אך לא למנות. מחלקות תווים, כמתים (quantifiers), קבוצות לכידה, עוגנים, והפשרה (trade-off) של חמדני מול עצלן, יחד עם המקומות הספציפיים שבהם תת-הקבוצה של MicroPython נופלת מ-CPython. פנו אליו כש-str.find או str.split נתקעים בסוף הדרך.

  • מכלים מעבר למובניםcollections.namedtuple() לרשומות מטיופסות, collections.deque לחוצצים מעגליים תחומים וחלונות מתגלגלים, collections.OrderedDict כאשר סדר ההכנסה הוא חלק מהשוויון, ו-heapq לשאלות ”מהו הקטן ביותר“ או ”מהו הדחוף ביותר“ הבנויות על רשימה פשוטה. כל אחד מהם ממלא פער שארבעת סוגי המכלים המרכזיים משאירים מאחור.

  • כלי זרימת העבודה היומיומיים – הבנות (comprehensions) לבניית אוספים מתוך קיימים, מחוללים (generators) ופרוטוקול האיטרטור לעיבוד נתונים בעצלתיים, מעצבים (decorators) ומנהלי הקשר (context managers) לעטיפת תבניות נפוצות של רכישה/שחרור ושל לפני/אחרי, והרגלי ניפוי הבאגים (קריאת traceback-ים, repr(), dir(), help(), המודול logging) שהופכים סקריפט שבור לסקריפט מתוקן.

2.42.1. שימוש בפריימר זה בהמשך

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

אם משהו בתיעוד המצלמה מתייחס בהמשך למושג Python שאינכם מזהים – נניח, ”זה מחזיר context manager“ או ”בצעו איטרציה על התוצאה“ – עמוד הפריימר המתאים הוא המקום להתחיל בו.

2.42.2. לאן ללכת מכאן

בקרת חומרה בסיסית בנויה ישירות על ה-Python שאתם מכירים כעת. בעוד שהפריימר התקיים בזיכרון, בקרת החומרה מתקיימת בעולם הפיזי – מתחים על פינים, פולסים על חוטים, בייטים מסונכרנים על אפיקים אל שבבים אחרים. ארגז הכלים עובר אל המודול machine ושכבה דקה של אלקטרוניקה. כל מה שבפריימר נישא קדימה; לא תצטרכו ללמוד מחדש את def או with או במה bytearray שונה מ-bytes.

כאשר תיתקלו בתכונת Python שמרגישה לא מוכרת בחומר החומרה, פריימר זה הוא המקום לחזור אליו.