ホームページ >バックエンド開発 >Python チュートリアル >Exec 関数の動作は Python 2 と Python 3 でどのように異なりますか?
Python 2 と Python 3 の Exec 関数の動作
exec ステートメントは、Python 2 と Python 3 の動作に顕著な違いを示します。 2、exec はステートメントとして機能し、関数内のローカル変数を効果的に変更します。 scope.
ただし、Python 3 では exec() は関数になります。これにより、Python 2 では可能であるにもかかわらず、関数内でローカル変数を変更することができなくなります。さらに、以前に宣言された変数であっても変更できません。
locals() 関数は、ローカル変数の一方的な更新のみを許可します。たとえば、次の Python 2 コードでは:
def foo(): a = 'spam' locals()['a'] = 'ham' print(a) # prints 'spam'
locals()['a'] への 'ham' の代入は、関数内の変数 'a' の値には影響しません。 「スパム」は出力されたままです。
Python 2 では、exec は locals() で見つかった変数を関数 locals に明示的にコピーして戻しました。 PyFrame_LocalsToFast。ただし、Python 3 では、この動作は不可能になりました。
Python 3 で望ましい動作を実現するには、exec() 呼び出し中に新しい名前空間 (辞書など) を使用する必要があります。これは、次の Python 3 コードで確認できます:
def execute(a, st): namespace = {} exec("b = {}\nprint('b:', b)".format(st), namespace) print(namespace['b'])
exec() ドキュメントには、locals() の使用法に課せられる制限が明示的に記載されています:
"注: デフォルトのローカルは次のように動作します。以下の関数 locals() について説明します。関数 exec() の後にローカルに対するコードの影響を確認する必要がある場合は、デフォルトのローカル ディクショナリへの変更を試行しないでください。戻ります。"
以上がExec 関数の動作は Python 2 と Python 3 でどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。