python の compile 関数の使い方は?
`compile()`関数はPythonの組み込み関数の一つで、文字列、バイトコード、AST(抽象構文木)オブジェクトをコードオブジェクトにコンパイルします。構文は以下の通りです。
compile(source, filename, mode[, flags[, dont_inherit]])
ソースはコンパイルするソースコードを指定します。文字列、バイトコード、または AST オブジェクトにすることができます。
filename:ソースコードのあるファイル名を指定します。もし指定しない場合は`”`を使用できます。
モードはコンパイルのモードを示し、次の3つのうち1つになります。
「exec」:モジュール、クラス、関数などの実行可能コードをコンパイルするために使用されます。
『eval』:単一の式をコンパイルするために使用される。
インタラクティブ環境でのコードスニペットのコンパイルに使用されます。
フラグ(オプション):複数個のフラグをビットごとの論理和演算子(`|`)で組み合わせることで、追加の制御フラグを表します。通常使用されるフラグは次のとおりです。
コード内で最上位の`await`ステートメントを使用可能にします(Python 3.7以降でのみ有効)。
ast.PyCF_ONLY_AST: ASTオブジェクトのみを返し、コードオブジェクトを生成しません。
`dont_inherit`(省略可能):既定值为`False`的ブーリアン。`True`に設定すると、`__future__`インポートを無視します。
compile()関数がソースコードをコードオブジェクトにコンパイルすると、eval()関数またはexec()関数を使用して実行できるようになる。
ここにいくつかの例を示します
# 编译并执行简单的表达式 code = compile('3 + 4', '', 'eval') result = eval(code) print(result) # 输出: 7 # 编译并执行代码片段 code = compile('for i in range(5):\n print(i)', '', 'exec') exec(code) # 输出: # 0 # 1 # 2 # 3 # 4 # 仅编译为AST对象 import ast code = compile('3 + 4', '', 'eval', flags=ast.PyCF_ONLY_AST) print(code) # 输出: <_ast.Expression object at 0x000001> # 编译包含顶级await语句的代码 code = compile('import asyncio\nasync def foo():\n await asyncio.sleep(1)', '', 'exec', flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT) exec(code)
`compile()` 関数は、動的なコード生成やインタプリタなどの高度な用途を目的としており、一般的なアプリケーション開発ではあまり使用されないことに注意してください。