exec_stmt | ::= | "exec" expression ["in" expression ["," expression]] |
この文は、Python コードの動的な実行をサポートします。 最初の式の値評価結果は文字列か、開かれたファイルオブジェクトか、 コードオブジェクトでなければなりません。文字列の場合、 一連の Python 実行文として解析し、(構文エラーが生じない限り) 実行します。開かれたファイルであれば、ファイルを EOF まで読んで解析し、実行します。コードオブジェクトなら、単に オブジェクトを実行します。
いずれの場合でも、オプションの部分が省略されると、コードは 現在のスコープ内で実行されます。in の後ろに一つだけ 式を指定する場合、その式は辞書でなくてはならず、 グローバル変数とローカル変数の両方に使われます。 これらはそれぞれグローバル変数とローカル変数として使われます。 locals を指定する場合は何らかのマップ型オブジェクトに せねばなりません. バージョン 2.4 で 変更 された仕様: 以前はlocals は辞書でなければなりませんでした
exec の副作用として実行されるコードで設定された変数名に
対応する名前の他に、追加のキーを辞書に追加することがあります。
例えば、現在の実装では、組み込みモジュール __builtin__
の辞書に対する参照を、__builtins__
(!) というキーで追加
することがあります。
プログラマのためのヒント: 式の動的な評価は、組み込み関数 eval() でサポートされています 組み込み関数 globals() および locals() は、 それぞれ現在のグローバル辞書とローカル辞書を返すので、 exec に渡して使うと便利です。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。