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()` 関数は、動的なコード生成やインタプリタなどの高度な用途を目的としており、一般的なアプリケーション開発ではあまり使用されないことに注意してください。

bannerAds