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

Python 2 と Python 3 では、「exec」の動作はどのように異なりますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-14 13:51:01923ブラウズ

How does the behavior of `exec` differ between Python 2 and Python 3?

Python 2 および Python 3 での exec の動作

Python 2 では、exec ステートメントがステートメントとして機能し、開発者が動的に実行できるようにしました。 Python コード。ただし、Python 3 では、exec は関数 exec() になり、動作にいくつかの違いが生じました。

Exec 関数の動作

顕著な違いの 1 つは、ローカル関数の処理です。変数。 Python 2 では、exec ステートメントを使用すると、関数スコープ内のローカル変数を変更できます。例:

def test():
    a = 42
    exec("a = 100")
    print(a)  # Output: 100

ただし、Python 3 では、この機能は利用できなくなりました。 exec() 関数を使用してコードを実行すると、ローカル変数は、事前に宣言されていたとしても変更されません。これは、関数スコープが Python 3 で常に最適化されるためです。

Python 3 での Python 2 の動作の実現

Python 2 の動作を複製するには、exec がローカル変数を変更します。 , Python 3 では、別のアプローチが提供されます。開発者は、ローカル スコープの代わりに新しい名前空間を使用する必要があります。これは、辞書を作成して exec() 関数に渡すことで実行できます。

def test():
    a = 42
    namespace = {}
    exec("a = 100", namespace)
    print(a)  # Output: 42
    print(namespace['a'])  # Output: 100

この例では、exec() 関数は変数操作に名前空間辞書を使用します。次に、名前空間を使用して、変更された 'a' の値が取得されます。

ローカル変数の強制

Python 3 では、一部の強制された変数が exec で予期しない動作を引き起こす可能性があります。 。次の例は次のことを示しています。

def test():
    a = 42
    d = locals()
    exec("a = 100\nprint('b:', a)", globals(), d)

    print(a)  # Output: 42
    print(d['a'])  # Output: 100

ここでは、exec() 関数内の 'a' 変数が 'b' 変数に強制され、別の値が出力されます。これは、exec() を使用して宣言された変数に影響を与える際の locals() の制限を示しています。

以上がPython 2 と Python 3 では、「exec」の動作はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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