3.14.6.1 compile()のエミュレーション

解析とバイトコード生成の間に、多くの有効なオペレーションが行われますが、最も単純なオペレーションは何もしないことです。この目的の為に、中間データ構造を作るためにparserモジュールを使用するのは、このコードと同等です。

>>> code = compile('a + 5', 'eval')
>>> a = 5
>>> eval(code)
10

parserモジュールを使う同等のオペレーションはやや長く、中間の内部解析木を、ASTオブジェクトとして保持します。

>>> import parser
>>> ast = parser.expr('a + 5')
>>> code = parser.compileast(ast)
>>> a = 5
>>> eval(code)
10

ASTオブジェクトとコードオブジェクトの両方を必要とするアプリケーションは、このコードを容易に簡単な関数内に入れることができます。

import parser

def load_suite(source_string):
    ast = parser.suite(source_string)
    code = parser.compileast(ast)
    return ast, code

def load_expression(source_string):
    ast = parser.expr(source_string)
    code = parser.compileast(ast)
    return ast, code


guido@python.org