2.42. まとめ¶
OpenMV Cam 用のスクリプトを書く際に常に登場する Python の各部分をひととおり見てきました。
言語の基礎 -- 値と変数、算術演算と比較、文字列とバイト列、4つの中核的なコレクション(
list、tuple、dict、set)、条件分岐とループ、関数の定義とその引数およびスコープの管理、クラスの定義と継承の利用、例外の送出と処理。これらは、Python の他のあらゆる部分が組み上げられる土台となるレンガです。構造的な部品 -- コードをモジュールやパッケージに分割すること、必要なものをインポートすること、
withを使ってファイルを読み書きすること、jsonを通じて構造化データをやり取りすること、そしてエンディアンや固定幅整数フィールドを持つバイナリレコードをstructでパックすること。これらは、スクリプトが単一ファイルを超えて大きくなったり、自身の外にある何かと通信する必要が生じたりした瞬間に登場します。制約のあるランタイム上で形を変える部分 -- なぜ MicroPython の浮動小数点数が32ビットなのか、そしてそれらを確実に比較する方法、ガベージコレクタがどのようにブロックを払い出し回収するのか、小さなヒープではなぜ断片化が問題になるのか、そして事前確保がどのように長時間動作するスクリプトの行儀を保つのか。デスクトップでの習慣はここで誤った判断につながることがあります。この内容は、デバイス上で動くコードのための正しいメンタルモデルを与えてくれます。
イントロスペクションと動的コードのツール -- 値や環境を 調べる ための
id()、hash()、isinstance()、issubclass()、callable()、globals()、locals()。そして実行時にコードを生成することが正しい答えとなる稀なケースのためのeval()/exec()/compile()。ほとんどのスクリプトはこれらに触れることはありませんが、それらが存在すること(そしていつ手を出すべきでないか)を知っておくことは、他人の Python を読むことの一部です。テキストのパターンマッチング -- 形は記述できても列挙はできない文字列のための
reモジュール。文字クラス、量指定子、キャプチャグループ、アンカー、そして貪欲(greedy)対非貪欲(lazy)のトレードオフ、さらに MicroPython のサブセットが CPython に及ばない具体的な箇所も含みます。str.findやstr.splitでは行き詰まったときに活用してください。組み込みを超えるコンテナ -- 型付きレコードのための
collections.namedtuple()、上限付きのリングバッファやスライディングウィンドウのためのcollections.deque、挿入順が等価性の一部になる場合のcollections.OrderedDict、そして通常のリスト上に構築された「最小は何か」「最も緊急なものは何か」という問いに答えるためのheapq。それぞれが、4つの中核的なコンテナ型が残す隙間を埋めてくれます。日常のワークフローツール -- 既存のコレクションから新しいコレクションを組み立てる内包表記、データを遅延処理するためのジェネレータとイテレータプロトコル、よくある取得/解放や前処理/後処理のパターンを包むデコレータとコンテキストマネージャ、そして壊れたスクリプトを修正済みのものに変えるデバッグの習慣(トレースバックの読み方、
repr()、dir()、help()、loggingモジュール)。
2.42.1. この入門書を後で活用する¶
この入門書は、一度きりで読み通すものではなく、参考資料として扱ってください。各章はあえて短くしてあります。スライスやコンテキストマネージャ、内包表記について思い出すために戻ってくることが、想定された使い方です。最もよく参照するセクションをブックマークしておきましょう。
後でカメラのドキュメントの中で、自分が知らない Python の概念(たとえば「これはコンテキストマネージャを返す」や「結果を反復する」など)が参照されていたら、対応する入門書のページが出発点になります。
2.42.2. ここからどこへ進むか¶
基本的なハードウェア制御 は、いまあなたが知っている Python の上に直接構築されます。入門書がメモリの中で生きていたのに対し、ハードウェア制御は物理的な世界で生きています。ピンの電圧、配線上のパルス、バスを介して他のチップへクロック送出されるバイト列です。道具立ては machine モジュールと薄い電子工学の層へと移ります。入門書のすべてはそのまま引き継がれます。def や with、あるいは bytearray が bytes とどう違うかを、もう一度学び直すことはありません。
ハードウェアの内容の中で馴染みのない Python の機能に出くわしたら、この入門書が戻ってくる場所です。