目次
はじめに
Pythonには多くの便利な組み込み関数がありますが、その中でも compile
関数 は、文字列やAST(抽象構文木)をコードオブジェクトに変換する強力な機能を持っています。本記事では、初心者向けに compile
関数の基本的な使い方から応用例までを詳しく解説します。
compile関数とは?
compile
関数は、文字列で記述されたPythonコードやASTをコードオブジェクトに変換し、exec
や eval
を用いて実行できるようにする関数です。
主な用途
- ユーザーからの入力を動的にコードとして実行する
- Pythonコードの事前解析や最適化
- 独自のスクリプト言語の実装
compile関数の基本構文
compile
関数の基本的な構文は以下の通りです。
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
引数の説明
source
:コンパイル対象のコード(文字列、AST、バイトコード)filename
:コードのソースを示す名前(通常は'<string>'
)mode
:'exec'
(複数行のコード)、'eval'
(単一の式)、'single'
(対話的な1行コード)flags
(省略可):コンパイル時のフラグdont_inherit
(省略可):親のコンパイル環境を引き継ぐかどうかoptimize
(省略可):最適化レベル(-1, 0, 1, 2)
compile関数の使用例
例1:簡単なPythonコードのコンパイルと実行
code = """
a = 10
b = 20
print("Sum:", a + b)
"""
compiled_code = compile(code, '<string>', 'exec')
exec(compiled_code)
このコードでは、文字列として記述されたPythonコードを compile
でコンパイルし、exec
で実行しています。
例2:evalモードでの使用
expr = "10 * 5"
compiled_expr = compile(expr, '<string>', 'eval')
result = eval(compiled_expr)
print("Result:", result)
この例では、eval
モードを使用して、単一の式を評価しています。
compile関数の応用例
例3:ユーザー入力の計算式を動的に評価
user_input = input("計算式を入力してください: ")
compiled_input = compile(user_input, '<string>', 'eval')
try:
result = eval(compiled_input)
print("計算結果:", result)
except Exception as e:
print("エラー:", e)
この例では、ユーザーからの入力を compile
して eval
で実行することで、動的な計算機能を実装できます。ただし、セキュリティ上のリスクがあるため、入力のサニタイズが必要です。
例4:AST(抽象構文木)を用いたコンパイル
import ast
source = "print(\\"Hello, World!\\")"
ast_tree = ast.parse(source)
compiled_ast = compile(ast_tree, '<ast>', 'exec')
exec(compiled_ast)
この例では、文字列のコードをASTに変換し、それを compile
して実行しています。これにより、コード解析や変換が可能になります。
まとめ
compile
関数は、Pythonコードを動的に実行する際に非常に強力なツールです。本記事では、基本構文から使用例、応用例までを紹介しました。特にユーザー入力を扱う場合は、セキュリティ対策を考慮することが重要です。Pythonをより深く理解するために、ぜひ compile
を活用してみてください。