{category}

Python - デバッグ

ast

エーエスティー(標準ライブラリ

意味 Pythonコードの構造解析


astとは?

astモジュールは、Pythonコードを抽象構文木(AST)と呼ばれる構造に変換します。 ASTはコードの構造を表現したもので、コードの意味を解析したり、変更したりするのに役立ちます。

astの具体的な使い方

シンプルな式のAST表示

import ast

code = "x = 1 + 2 * 3"
tree = ast.parse(code)
print(ast.dump(tree, indent=2))

👇出力結果

Module(
  body=[
    Assign(
      targets=[
        Name(id='x', ctx=Store())
      ],
      value=BinOp(
        left=Constant(value=1),
        op=Add(),
        right=BinOp(
          left=Constant(value=2),
          op=Mult(),
          right=Constant(value=3)
        )
      )
    )
  ],
  type_ignores=[]
)

簡単な数式をASTに変換し、その構造を表示します。このコードでは、変数への代入と算術演算を含む式のASTを確認できます。

関数定義のAST表示と実行

import ast

code = """
def greet(name):
    return f"こんにちは、{name}さん!"

print(greet("太郎"))
"""

tree = ast.parse(code)
print("ASTの構造:")
print(ast.dump(tree, indent=2))

print("\n実行結果:")
exec(compile(tree, filename="<ast>", mode="exec"))

👇出力結果

ASTの構造:
Module(
  body=[
    FunctionDef(
      name='greet',
      args=arguments(
        posonlyargs=[],
        args=[arg(arg='name')],
        kwonlyargs=[],
        kw_defaults=[],
        defaults=[]
      ),
      body=[
        Return(
          value=JoinedStr(
            values=[
              Constant(value='こんにちは、'),
              FormattedValue(
                value=Name(id='name', ctx=Load()),
                conversion=-1
              ),
              Constant(value='さん!')
            ]
          )
        )
      ],
      decorator_list=[]
    ),
    Expr(
      value=Call(
        func=Name(id='print', ctx=Load()),
        args=[
          Call(
            func=Name(id='greet', ctx=Load()),
            args=[Constant(value='太郎')],
            keywords=[]
          )
        ],
        keywords=[]
      )
    )
  ],
  type_ignores=[]
)

実行結果:
こんにちは、太郎さん!

関数定義と関数呼び出しを含むコードのASTを表示し、その後で実際にコードを実行します。ASTの構造と実行結果の両方を確認できます。

astに関するよくある質問

Q. ASTとは何ですか?
A. AST(Abstract Syntax Tree)は、プログラムのソースコードの構造を木構造で表現したものです。コードの意味的な構造を表現し、コード解析や変換に利用されます。
Q. astモジュールの主な用途は?
A. astモジュールの主な用途は、Pythonコードの構文解析、コード変換、静的解析などです。コードの意味を理解し、プログラム的に操作することができます。
Q. ast.parseとast.dumpの違いは?
A. ast.parseはPythonコードを解析してAST(抽象構文木)を生成する関数です。一方、ast.dumpはASTをわかりやすい文字列形式で出力する関数です。parseでASTを作成し、dumpでその内容を確認するという流れで使用されます。

astが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Pythonのastやre.sub、csv、random、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


Pythonを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!Pythonはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

re.sub

パターンを置換

種類: 正規表現

csv

表計算データ

種類: データ交換

random

乱数を作る

種類: 数学関連

is

同一のものか

種類: アイデンティティ演算子

[expression for item in iterable if condition]

条件に合う要素だけ抽出

種類: リスト内包表記