#
14 `exec` 文

  exec_stmt | ::= | "exec" expression ["in" expression ["," expression]]

  Download entire grammar as text.

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

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

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

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