6.14 exec

exec_stmt ::= "exec" expression ["in" expression ["," expression]]
Download entire grammar as text.

この文は、Python コードの動的な実行をサポートします。 最初の式の値評価結果は文字列か、開かれたファイルオブジェクトか、 コードオブジェクトでなければなりません。文字列の場合、 一連の Python 実行文として解析し、(構文エラーが生じない限り) 実行します。開かれたファイルであれば、ファイルを EOF まで読んで解析し、実行します。コードオブジェクトなら、単にこれを実行します。全ての 場合で、実行されたコードはファイル入力として有効であることが 期待されます (セクション 8.2、''ファイル入力''を参照)。 returnyield 文は、exec 文に 渡されたコードの文脈中においても関数定義の外では使われない点に 注意してください。

いずれの場合でも、オプションの部分が省略されると、コードは 現在のスコープ内で実行されます。in の後ろに一つだけ 式を指定する場合、その式は辞書でなくてはならず、 グローバル変数とローカル変数の両方に使われます。 これらはそれぞれグローバル変数とローカル変数として使われます。 locals を指定する場合は何らかのマップ型オブジェクトに せねばなりません. バージョン 2.4 で 変更 された仕様: 以前はlocals は辞書でなければなりませんでした

exec の副作用として実行されるコードで設定された変数名に 対応する名前の他に、追加のキーを辞書に追加することがあります。 例えば、現在の実装では、組み込みモジュール __builtin__ の辞書に対する参照を、__builtins__ (!) というキーで追加 することがあります。

プログラマのためのヒント: 式の動的な評価は、組み込み関数 eval() でサポートされています 組み込み関数 globals() および locals() は、 それぞれ現在のグローバル辞書とローカル辞書を返すので、 exec に渡して使うと便利です。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。