ホームページ >バックエンド開発 >Python チュートリアル >Python 2 と Python 3 では、「exec」の動作はどのように異なりますか?
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 サイトの他の関連記事を参照してください。