今回は、Pythonのcompile()関数に注目します。
Pythonのcompile()関数の動作を理解します。
ここで、マクロと関数の概念を扱ったシステム/OSプログラミングに話を戻しましょう。
マクロは基本的にあらかじめ定義されたコードブロックであり、関数呼び出し時に現在のソースコードと一緒に実行されます。
つまり、関数ブロック全体が、作業中のプログラムコード内で一発で実行されます。
同じように、Pythonのcompile()関数は、関数内でコードの断片を定義するのに役立ちます。
さらに、定義されたコードをプログラム内の任意の場所で実行するために使用できるコードブロックオブジェクトが生成されます。
compile()関数内で定義された入力-ソース-コードは、関数から返されるコードオブジェクトを通して、どんなプログラムでも簡単に実行することができます。
このように、Pythonのcompile()関数は、再利用性の達成に役立ち、より信頼性が高いことが証明されています。
Python compile() 関数のシンタックス
Python compile() 関数は、ソースコードを引数として受け取り、実行可能なコードオブジェクトを返します。
compile (source, filename, mode, flags = 0 , dont_inherit = False , optimize = - 1 )
|
ここで、Pythonのcompile()関数のパラメータリストを詳しく理解しましょう。
compile()関数のパラメータ
-
source
(必須)。ソースコードまたはコンパイルするバイト列です。 -
filename
(必須): ソースコードを格納するファイル名です。存在しない場合は、ソースコードの名前を入力することができる。 -
mode
(必須): ソースをコンパイルするときのモードです。この3つのモードは以下の通りです。 - eval: 1. eval: ソースが1つの式でコンパイルされるモードです。
2.シングル。ソースが単一の対話型文である場合に使用される。 - exec: ソースが実行するステートメントのブロックを含む場合に使用されます。
オプションのパラメータです。
-
flags
: デフォルト値は 0 です。 -
dont_inherit
: 実行のフローを決定します。デフォルト値は False です。 -
Optimize
: デフォルト値は-1です。
この記事もチェック:Pythonでinput関数を使ってユーザーからの標準入力を変数に格納する方法
Python compile() 関数の例
以下の例では、compile()関数にソースコードとして1つの変数’var = 10’を渡しています。
さらに、引数リストに渡されたソースをコンパイルして実行するために「シングルモード」を使用しています。
var = 10
compile_obj = compile ( 'var' , 'Value' , 'single' )
exec (compile_obj)
|
compile()関数により、渡されたソースコードに対応するコードオブジェクトが生成されます。
次に、Pythonのexec()関数を使用して、コードオブジェクトを動的にコンパイルします。
結果は以下の通りです。
|
ここでは、compile()関数に一つの実行式を渡しているので、「evalモード」が使用されています。
action = 'print(100)'
compile_obj = compile (action, 'Display' , 'eval' )
exec (compile_obj)
|
結果は以下の通りです。
100 |
下図のように、compile()関数にソースコードの文字列を渡し、exec()関数で作成したコードオブジェクトを通してコードブロックを実行するために’execモード’を使用しています。
action = 'x = 15
compile_obj = compile (action, 'Product' , 'exec' )
exec (compile_obj)
|
結果は以下の通りです。
Product of x and y = 150
|
この記事もチェック:Pythonのexec関数の使い方|引数や変数の使い方を解説する
まとめ
ここまでで、このトピックは終了です。
何か疑問があれば、お気軽にコメントください。
Pythonプログラミングに関連する他の記事については、Python Tutorials Pythonをご覧ください。