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 שמרגישה לא מוכרת בחומר החומרה, פריימר זה הוא המקום לחזור אליו.