2.42. الخلاصة

لقد تجوّلت عبر أجزاء Python التي تظهر باستمرار عند كتابة برامج نصية لـ OpenMV Cam:

  • أساسيات اللغة -- القيم والمتغيرات، والحساب والمقارنة، والسلاسل النصية والبايتات، والمجموعات الأساسية الأربع (list و tuple و dict و set)، والشروط والحلقات، وتعريف الدوال وإدارة وسائطها ونطاقها، وتعريف الأصناف واستخدام الوراثة، ورفع الاستثناءات ومعالجتها. هذه هي اللبنات التي يُبنى منها كل جزء آخر من Python.

  • القطع البنيوية -- تقسيم الشيفرة عبر الوحدات والحزم، واستيراد ما تحتاجه، وقراءة الملفات وكتابتها باستخدام with، وتبادل البيانات المهيكلة عبر json، وتعبئة السجلات الثنائية عبر struct مع ترتيب البايتات وحقول الأعداد الصحيحة ثابتة العرض. تظهر هذه القطع لحظة نمو البرنامج النصي إلى ما هو أكبر من ملف واحد أو حاجته للتواصل مع شيء خارجه.

  • الأجزاء التي تتغير ملامحها على بيئة تشغيل محدودة -- لماذا أعداد MicroPython العشرية بطول 32 بت وكيف تقارنها بموثوقية، وكيف يوزّع جامع المهملات الكتل ويستردها، ولماذا يهم التجزؤ على كومة صغيرة، وكيف يحافظ التخصيص المسبق على حسن سلوك البرامج النصية طويلة التشغيل. تضلّلك عادات سطح المكتب أحياناً هنا؛ تمنحك هذه المادة النموذج الذهني الصحيح للشيفرة التي تعيش على الجهاز.

  • أدوات الاستبطان والشيفرة الديناميكية -- id() و hash() و isinstance() و issubclass() و callable() و globals() و locals() للنظر إلى القيم والبيئة؛ وeval() / exec() / compile() للحالات النادرة التي يكون فيها إنتاج الشيفرة في وقت التشغيل هو الجواب الصحيح. معظم البرامج النصية لا تلمس هذه أبداً، لكن معرفة وجودها (ومتى لا ينبغي اللجوء إليها) جزء من قراءة شيفرة Python الخاصة بالآخرين.

  • مطابقة الأنماط على النص -- وحدة re للسلاسل النصية التي يمكنك وصف شكلها لكن لا يمكنك تعدادها. أصناف المحارف، والمكمِّمات، والمجموعات الملتقطة، والمراسي، والمفاضلة بين الجشع والكسول، مع المواضع المحددة التي يقصُر فيها مجموعة MicroPython الفرعية عن CPython. الجأ إليها عندما يبلغ str.find أو str.split نهاية طريقه.

  • الحاويات بعد المدمجة -- collections.namedtuple() للسجلات ذات الأنواع، وcollections.deque للمخازن المؤقتة الحلقية المحدودة والنوافذ المتدحرجة، وcollections.OrderedDict عندما يكون ترتيب الإدراج جزءاً من المساواة، وheapq لأسئلة "ما هو الأصغر" أو "ما هو الأكثر إلحاحاً" المبنية على قائمة عادية. كلٌّ منها يسدّ فجوة تتركها أنواع الحاويات الأساسية الأربعة.

  • أدوات سير العمل اليومي -- الاستيعابات لبناء المجموعات من مجموعات موجودة، والمولّدات وبروتوكول المُكرِّر لمعالجة البيانات بكسل، والمزخرفات ومديرو السياق لتغليف أنماط الاكتساب/الإطلاق وقبل/بعد الشائعة، وعادات التنقيح (قراءة آثار التتبع، وrepr() وdir() وhelp() ووحدة logging) التي تحوّل برنامجاً نصياً معطوباً إلى آخر مُصلَح.

2.42.1. استخدام هذا التمهيد لاحقاً

تعامل مع التمهيد كمادة مرجعية، لا كقراءة بمرور واحد. الفصول قصيرة عن قصد؛ والعودة لتجديد المعلومات حول التقطيع أو مديري السياق أو الاستيعابات هو الاستخدام المقصود. ضع علامة مرجعية على القسم الذي تلجأ إليه أكثر.

إذا أشار شيء في وثائق الكاميرا لاحقاً إلى مفهوم في Python لا تعرفه -- مثلاً، "هذا يُعيد مدير سياق" أو "كرِّر على النتيجة" -- فإن صفحة التمهيد المقابلة هي المكان الذي تبدأ منه.

2.42.2. إلى أين تذهب من هنا

التحكم الأساسي بالعتاد يُبنى مباشرةً على Python الذي تعرفه الآن. حيث كان التمهيد يعيش في الذاكرة، يعيش التحكم بالعتاد في العالم المادي -- فولتيات على الدبابيس، ونبضات على الأسلاك، وبايتات تُنقل عبر النواقل إلى رقائق أخرى. تنتقل مجموعة الأدوات إلى وحدة machine وطبقة رقيقة من الإلكترونيات. كل شيء من التمهيد يستمر معك؛ لن تتعلم من جديد def أو with أو كيف يختلف bytearray عن bytes.

عندما تصطدم بميزة في Python تبدو غير مألوفة في مادة العتاد، فهذا التمهيد هو المكان الذي تعود إليه.