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

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

Linda Hamilton
リリース: 2024-11-18 06:27:02
オリジナル
210 人が閲覧しました

How Does the Behaviour of the `exec` Function Differ in Python 2 and Python 3?

Python 2 と Python 3 の exec 関数の動作

Python 2 と Python 3 では、exec 関数の動作に顕著な違いがあります.

理由違い

Python 2 では、exec はローカル スコープの最適化を明示的に無効にし、ローカル スコープとグローバル スコープの両方の変数へのアクセスを許可するステートメントでした。対照的に、Python 3 の exec() は関数スコープを常に最適化する関数です。

変数バインディングへの影響

Python 2 では、exec ステートメントを使用するときに変数locals() で見つかったものは、関数 locals にコピーされて戻されました。これにより、関数内の変数が exec ステートメントで指定された値にバインドされることになります。

ただし、Python 3 では、exec() はデフォルトでこの動作をしません。したがって、関数内の変数は、exec() ステートメント内の変数にバインドされません。

ローカル変数へのアクセス

Python 3 で exec() を使用してローカル変数にアクセスするには、新しい名前空間 (通常は辞書) を作成し、引数としてfunction.

改訂されたコード

以下は、Python 2 の動作を実現するために Python 3 で exec() を正しく使用する方法を示す改訂されたコード例です。

def execute(a, st):
    namespace = {}
    exec("b = {}\nprint('b:', b)".format(st), namespace)
    print(namespace['b'])
ログイン後にコピー

このコードでは、namespace という名前の辞書が作成され、exec() に渡されます。 exec() ステートメント内で定義された変数はすべて、辞書を通じてアクセスできます。

Notes

exec() ドキュメントでは、デフォルトのローカル辞書を変更しようとすることに対して明示的に警告しています。 exec() 呼び出し内で行われた変更が反映されていない可能性があるためです。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート