*はじめに [#f36e0485] ふと、Pythonの #code(Python){{ [n for n in range(10) if n * n > 10] }} ってどう処理されてるんだろうなぁと気になりました。というわけで読みます。今回はpythonコマンド起動してシェルで上記のコードを打ったという前提で読んでいくことにします。 読解に利用したPythonのバージョンは3.5.1です。 1ページで書けるかなと思いましたが長くなったので例によって以下のステップに分けます。 +[[スクリプト解析まで>Python/初期化処理を読む]] +[[スクリプト解析>Python/スクリプト解析を読む]] +[[AST作成>Python/AST作成を読む]] +[[シンボルテーブル作成>Python/シンボルテーブル作成を読む]] +[[バイトコード生成>Python/バイトコード生成を読む]] +[[バイトコード実行>Pyton/バイトコード実行を読む]] ---- 昨年(2016年)に読んだ時は主に構文解析→コード生成、実行の流れを読みました。この1年ぐらいPythonに触れる機会が多くあってPythonのオブジェクト指向がかなりわかってきたのでシーズン2としてオブジェクト周りに関する実装を読んでいきたいと思います。 読解に利用するPythonはバージョンを上げて3.6.3。そろそろ3.7出そうだなぁ -オブジェクトと属性 --[[読解対象とするPythonコードと解析方法>Python/読解対象とするPythonコードと解析方法]] --[[ビルトインがビルトインされるまで>Python/ビルトインがビルトインされるまで]] --[[C関数実行とPyObject>Python/C関数実行とPyObject]] --[[build_class前編(というよりPyTypeObject)>Python/build_class前編(というよりPyTypeObject)]] --[[build_class後編>Python/build_class後編]] --[[インスタンス生成>Python/インスタンス生成]] --[[メソッド呼び出し>Python/メソッド呼び出し]] -クロージャ -[[クロージャ>Python/クロージャ]]