Python 関数の紹介:compile 関数の機能と使用例
Python プログラミングでは、compile() 関数は組み込み関数であり、その機能は変換することです。フォーム内の文字列 Python コードは、バイトコードまたは AST オブジェクトにコンパイルされます。コンパイル後、バイトコードまたは AST オブジェクトを実行することでコードを実行できます。この記事では、コンパイル関数の機能と使い方を詳しく紹介し、実践的なコード例をいくつか紹介します。
コンパイル関数の構文とパラメータ
コンパイル関数の構文は次のとおりです。
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
ログイン後にコピー
このうち、パラメータの意味は次のとおりです。
##source: 文字列形式の文字 Python コード; filename: コードが配置されているファイル名。コードがファイルからのものでない場合は、「」などの識別可能な識別子を使用できます; - mode: コードがコンパイルされるモード。
"exec": コードが Python ステートメントまたはステートメントのグループの場合は、このモードを使用します。 "eval": コードが Python 式の場合は、これを使用しますmode モード;"single": コードが単一の対話型入力である場合は、このモードを使用します。
- #flags: コンパイラの制御に使用されるフラグ。オプションのパラメータ:
PyCF_SOURCE_IS_UTF8: ソース コードで UTF-8 エンコーディングが使用されている場合は、このフラグを使用します; PyCF_IGNORE_COOKIE: ソース コード内の UTF-8 タグを無視します; -
PyCF_ONLY_AST: コードをバイトコードではなく抽象構文ツリー (AST) オブジェクトにコンパイルします。
dont_inherit: True に設定すると、親スコープからフラグは継承されません。 optimize: コンパイル時の最適化レベルを設定する整数。デフォルト値 -1 は最適化を無効にします。
コンパイル関数の戻り値
コンパイル関数はコード オブジェクトを返します。このオブジェクトは、exec()、eval()、または ast モジュールによって提供されるその他の API を通じてさらに処理できます。 。
コンパイル関数を使用する場合、関数によって返されたコード オブジェクトは通常、Python インタープリターを実行してコードを実行するために使用されます。
コンパイル機能の使用例
コンパイル機能の使用例をいくつか示します。これらの例では、compile 関数を使用して単純な Python コードをコンパイルし、exec() 関数を通じてそのコードを実行します。
例 1: 実行モードの使用
次の例では実行モードを使用しています。これは、ソース コードが Python ステートメントのセットであることを意味します。 print ステートメントを使用して何かを出力します。
source_code = "print('Hello, world!')"
compiled_code = compile(source_code, "<string>", "exec")
exec(compiled_code)
ログイン後にコピー
コード出力の結果は次のとおりです:
例 2: eval モードの使用
次の例では eval モードを使用しています。これは、ソース コードが Python であることを意味します。表現。加算演算子を使用して 2 つの数値を加算する単純な式を文字列内に定義します。次に、 eval() 関数を使用して式を評価し、結果を出力します。
source_code = "1 + 2"
compiled_code = compile(source_code, "<string>", "eval")
result = eval(compiled_code)
print(result)
ログイン後にコピー
コード出力の結果は次のとおりです:
例 3: AST モードの使用
次の例では AST モードを使用します。これは、ソース コードがコンパイルされることを意味します。抽象構文ツリーに変換します。 if/else 条件文を使用して変数の値をテストし、結果を出力する文字列で Python コードを定義します。
import ast
source_code = """
a = 5
if a > 0:
print('a is positive')
else:
print('a is non-positive')
"""
compiled_code = compile(source_code, "<string>", "exec", flags=ast.PyCF_ONLY_AST)
ast.dump(compiled_code)
exec(compiled_code)
ログイン後にコピー
コード出力の結果は次のとおりです:
If(test=Compare(left=Name(id='a', ctx=Load()), ops=[GreaterThan()], comparators=[Num(n=0)]), body=[Expr(value=Call(func=Name(id='print', ctx=Load()), args=[Str(s='a is positive')], keywords=[]))], orelse=[Expr(value=Call(func=Name(id='print', ctx=Load()), args=[Str(s='a is non-positive')], keywords=[]))])
a is positive
ログイン後にコピー
この例では、ast モジュールの PyCF_ONLY_AST タグを使用して、コードを AST オブジェクトにコンパイルします。次に、ast.dump() 関数を使用して、この AST オブジェクトを文字列表現に変換し、結果を出力します。
結論
compile() 関数は、Python コードを文字列から実行可能コード オブジェクトに変換するのに役立つ柔軟で強力なツールです。さまざまなオプションとフラグがありますが、一般的な使用法は、ソース コードをコンパイル済みコード オブジェクトにコンパイルし、exec()、eval()、または AST を使用してそのコードを実行することです。より高度な Python コードを作成したい場合は、コンパイル機能を習得する必要があります。
以上がPython関数入門:コンパイル関数の機能と使用例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。