31.3.3 サンプル

この節では、Python ソースコードに対する抽象構文木 AST の かんたんな例をいくつかご紹介します。これらの例では parse() 関数をどうやって使うか、AST の repr 表現は どんなふうになっているか、そしてある AST ノードの属性に アクセスするにはどうするかを説明します。

最初のモジュールでは単一の関数を定義しています。 かりにこれは /tmp/doublelib.py に格納されていると仮定しましょう。

"""This is an example module.

This is the docstring.
"""

def double(x):
    "Return twice the argument"
    return x * 2

以下の対話的インタプリタのセッションでは、 見やすさのため 長い AST の repr を整形しなおしてあります。 AST の repr では qualify されていないクラス名が使われています。 repr 表現からインスタンスを作成したい場合は、 compiler.ast モジュールから それらのクラス名を import しなければなりません。

>>> import compiler
>>> mod = compiler.parseFile("/tmp/doublelib.py")
>>> mod
Module('This is an example module.\n\nThis is the docstring.\n', 
       Stmt([Function(None, 'double', ['x'], [], 0,
                      'Return twice the argument', 
                      Stmt([Return(Mul((Name('x'), Const(2))))]))]))
>>> from compiler.ast import *
>>> Module('This is an example module.\n\nThis is the docstring.\n', 
...    Stmt([Function(None, 'double', ['x'], [], 0,
...                   'Return twice the argument', 
...                   Stmt([Return(Mul((Name('x'), Const(2))))]))]))
Module('This is an example module.\n\nThis is the docstring.\n', 
       Stmt([Function(None, 'double', ['x'], [], 0,
                      'Return twice the argument', 
                      Stmt([Return(Mul((Name('x'), Const(2))))]))]))
>>> mod.doc
'This is an example module.\n\nThis is the docstring.\n'
>>> for node in mod.node.nodes:
...     print node
... 
Function(None, 'double', ['x'], [], 0, 'Return twice the argument',
         Stmt([Return(Mul((Name('x'), Const(2))))]))
>>> func = mod.node.nodes[0]
>>> func.code
Stmt([Return(Mul((Name('x'), Const(2))))])

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。