ホームページ >バックエンド開発 >Python チュートリアル >Exec 関数の動作は Python 2 と Python 3 でどのように異なりますか?

Exec 関数の動作は Python 2 と Python 3 でどのように異なりますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-14 22:02:02891ブラウズ

How Does Exec Function Behavior Differ Between Python 2 and 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。