ホームページ >バックエンド開発 >Python チュートリアル >Python の「exec」関数でローカル変数を正しく更新するにはどうすればよいですか?

Python の「exec」関数でローカル変数を正しく更新するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 13:47:11464ブラウズ

How to Correctly Update Local Variables with Python's `exec` Function?

Python で exec を使用してローカル変数を更新する方法

Python の exec 関数を使用すると、コードを実行時に動的に実行できます。ただし、exec を使用してローカル変数に値を割り当てると、特定の動作が予期しない場合があります。

Python 3 の問題

Python 3 では、次のコードは 1 を出力します。予想される 3 の代わりに:

def f():
    a = 1
    exec("a = 3")
    print(a)

f()

これは、Python 3 では exec 関数がデフォルトであるためです。グローバル名前空間を変更します。ローカル変数を変更するには、明示的なローカル辞書を提供する必要があります。

Python 3 での解決策

Python 3 で exec を使用してローカル変数を更新する正しい方法は次のとおりです。

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)

Python 2 と Python 3動作

Python 2 では、元のコードは exec 関数がローカル名前空間を変更することを前提としていたため、期待どおりに動作しました。ただし、Python 3 では、最適化の目的でこの動作が変更されました。

技術的な詳細

Python 3 では、通常、ローカル変数は辞書ではなく配列に格納されます。この最適化により、ローカル変数の辞書を維持するオーバーヘッドが防止されます。ただし、ローカル変数を直接変更する exec の機能も制限されます。

明示的なローカル辞書を提供することにより、exec 関数はその名前空間でコードを実行するように指示され、ローカル変数を更新できるようになります。

結論

Python 3 の exec を使用してローカル変数を更新するには、明示的なローカル辞書を提供する必要があります。これにより、変更が正しい名前空間で行われることが保証され、予期しないコードの動作が防止されます。

以上がPython の「exec」関数でローカル変数を正しく更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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