ホームページ >バックエンド開発 >Python チュートリアル >Python 2 と Python 3 では、「exec」関数の動作はどのように異なりますか?
Python 2 と Python 3 の exec 関数の動作
Python 2 と Python 3 では、exec 関数の動作に顕著な違いがあります.
理由違い
Python 2 では、exec はローカル スコープの最適化を明示的に無効にし、ローカル スコープとグローバル スコープの両方の変数へのアクセスを許可するステートメントでした。対照的に、Python 3 の exec() は関数スコープを常に最適化する関数です。
変数バインディングへの影響
Python 2 では、exec ステートメントを使用するときに変数locals() で見つかったものは、関数 locals にコピーされて戻されました。これにより、関数内の変数が exec ステートメントで指定された値にバインドされることになります。
ただし、Python 3 では、exec() はデフォルトでこの動作をしません。したがって、関数内の変数は、exec() ステートメント内の変数にバインドされません。
ローカル変数へのアクセス
Python 3 で exec() を使用してローカル変数にアクセスするには、新しい名前空間 (通常は辞書) を作成し、引数としてfunction.
改訂されたコード
以下は、Python 2 の動作を実現するために Python 3 で exec() を正しく使用する方法を示す改訂されたコード例です。
def execute(a, st): namespace = {} exec("b = {}\nprint('b:', b)".format(st), namespace) print(namespace['b'])
このコードでは、namespace という名前の辞書が作成され、exec() に渡されます。 exec() ステートメント内で定義された変数はすべて、辞書を通じてアクセスできます。
Notes
exec() ドキュメントでは、デフォルトのローカル辞書を変更しようとすることに対して明示的に警告しています。 exec() 呼び出し内で行われた変更が反映されていない可能性があるためです。
以上がPython 2 と Python 3 では、「exec」関数の動作はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。