今回は、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 =10compile_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 = 15compile_obj =compile(action, 'Product', 'exec')exec(compile_obj) | 
結果は以下の通りです。
| Product of x andy =150 | 
この記事もチェック:Pythonのexec関数の使い方|引数や変数の使い方を解説する
まとめ
ここまでで、このトピックは終了です。
何か疑問があれば、お気軽にコメントください。
Pythonプログラミングに関連する他の記事については、Python Tutorials Pythonをご覧ください。
