目次
はじめに
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 を活用してみてください。