2.42. สรุป¶
คุณได้ศึกษาส่วนต่างๆ ของ Python ที่พบบ่อยเมื่อเขียนสคริปต์สำหรับ OpenMV Cam:
พื้นฐานของภาษา -- ค่าและตัวแปร เลขคณิตและการเปรียบเทียบ สตริงและไบต์ คอลเลกชันหลักสี่ประเภท (
list,tuple,dict,set) เงื่อนไขและลูป การนิยามฟังก์ชันและการจัดการอาร์กิวเมนต์และขอบเขต การนิยามคลาสและการใช้การสืบทอด การเรียกและการจัดการข้อยกเว้น สิ่งเหล่านี้คือพื้นฐานที่ทุกส่วนอื่นของ Python สร้างขึ้นจากส่วนโครงสร้าง -- การแยกโค้ดเป็นโมดูลและแพ็กเกจ การนำเข้าสิ่งที่ต้องการ การอ่านและเขียนไฟล์ด้วย
withการแลกเปลี่ยนข้อมูลที่มีโครงสร้างผ่านjsonและการแพ็กเรคอร์ดไบนารีผ่านstructพร้อม endianness และฟิลด์จำนวนเต็มความกว้างคงที่ สิ่งเหล่านี้ปรากฏขึ้นทันทีที่สคริปต์เติบโตเกินไฟล์เดียวหรือต้องสื่อสารกับสิ่งภายนอกส่วนที่เปลี่ยนรูปแบบบนรันไทม์ที่มีข้อจำกัด -- ทำไม MicroPython floats จึงเป็น 32 บิตและวิธีการเปรียบเทียบอย่างน่าเชื่อถือ วิธีที่ garbage collector จัดสรรและคืนบล็อก ทำไม fragmentation จึงสำคัญบน heap ขนาดเล็ก และวิธีการจัดสรรล่วงหน้าทำให้สคริปต์ที่ทำงานนานทำงานได้ดี นิสัยจาก desktop บางอย่างอาจทำให้เข้าใจผิดที่นี่ เนื้อหานี้ให้โมเดลทางจิตที่ถูกต้องสำหรับโค้ดที่ทำงานบนอุปกรณ์
เครื่องมือ introspection และโค้ดแบบไดนามิก --
id(),hash(),isinstance(),issubclass(),callable(),globals(),locals()สำหรับการดู ค่า และสภาพแวดล้อม;eval()/exec()/compile()สำหรับกรณีที่หายากที่การสร้างโค้ดในขณะรันเป็นคำตอบที่ถูกต้อง สคริปต์ส่วนใหญ่ไม่เคยใช้สิ่งเหล่านี้ แต่การรู้ว่ามีอยู่ (และเมื่อไรไม่ควรใช้) เป็นส่วนหนึ่งของการอ่านโค้ด Python ของผู้อื่นการจับคู่รูปแบบในข้อความ -- โมดูล
reสำหรับสตริงที่รูปแบบสามารถอธิบายได้แต่ไม่สามารถระบุครบทุกกรณีได้ คลาสอักขระ ตัวหาปริมาณ กลุ่มจับภาพ anchor และการแลกเปลี่ยนระหว่าง greedy และ lazy พร้อมกับจุดที่ subset ของ MicroPython หยุดสั้นกว่า CPython ใช้เมื่อstr.findหรือstr.splitไม่เพียงพออีกต่อไปคอลเลกชันที่เกินกว่าฟังก์ชันในตัว --
collections.namedtuple()สำหรับเรคอร์ดที่มีประเภทcollections.dequeสำหรับ ring buffer ที่มีขอบเขตและ rolling windowcollections.OrderedDictเมื่อลำดับการแทรกเป็นส่วนหนึ่งของความเท่าเทียม และheapqสำหรับคำถาม "อะไรเล็กที่สุด" หรือ "อะไรเร่งด่วนที่สุด" ที่สร้างบนลิสต์ธรรมดา แต่ละอย่างเติมช่องว่างที่คอลเลกชันหลักสี่ประเภทไม่ครอบคลุมเครื่องมือการทำงานประจำวัน -- comprehensions สำหรับสร้างคอลเลกชันจากคอลเลกชันที่มีอยู่ generator และ iterator protocol สำหรับประมวลผลข้อมูลแบบ lazy decorator และ context manager สำหรับการห่อรูปแบบ acquire/release และ before/after ที่พบบ่อย และนิสัยการดีบัก (การอ่าน traceback,
repr(),dir(),help(), โมดูลlogging) ที่เปลี่ยนสคริปต์ที่เสียให้กลายเป็นสคริปต์ที่ทำงานได้
2.42.1. การใช้บทนำนี้ในภายหลัง¶
ปฏิบัติกับบทนำนี้เป็นสื่ออ้างอิง ไม่ใช่การอ่านครั้งเดียว บทต่างๆ สั้นโดยตั้งใจ การกลับมาทบทวน slicing หรือ context manager หรือ comprehensions คือการใช้งานที่ตั้งใจไว้ บุ๊กมาร์กส่วนที่คุณใช้บ่อยที่สุด
หากในภายหลังเอกสารของกล้องอ้างถึงแนวคิด Python ที่คุณไม่รู้จัก -- เช่น "สิ่งนี้คืนค่า context manager" หรือ "วนซ้ำผลลัพธ์" -- หน้า primer ที่เกี่ยวข้องคือจุดเริ่มต้น
2.42.2. ขั้นตอนต่อไป¶
การควบคุมฮาร์ดแวร์พื้นฐาน สร้างโดยตรงบน Python ที่คุณรู้แล้ว ในขณะที่ primer อยู่ในหน่วยความจำ การควบคุมฮาร์ดแวร์อยู่ในโลกทางกายภาพ -- แรงดันไฟบนพิน พัลส์บนสาย ไบต์ที่ clock ผ่านบัสไปยังชิปอื่น ชุดเครื่องมือเปลี่ยนเป็นโมดูล machine และชั้น electronics บางๆ ทุกอย่างจาก primer ยังคงใช้ได้ต่อไป คุณจะไม่ต้องเรียนรู้ def หรือ with หรือความแตกต่างระหว่าง bytearray กับ bytes ใหม่
เมื่อคุณพบลักษณะของ Python ที่รู้สึกไม่คุ้นเคยในเนื้อหาฮาร์ดแวร์ บทนำนี้คือที่ที่ควรกลับมา