ホームページ >バックエンド開発 >Python チュートリアル >Python 2 のリスト理解スコープが Python 3 と異なるのはなぜですか?
リスト内包表記: スコープの混乱の原因
Python 2 のリスト内包表記の独特な側面の 1 つは、変数のスコープとの異常な相互作用です。具体的には、リスト内包表記のループ制御変数が周囲のスコープに「漏れ」、潜在的なエラーや混乱を引き起こします。
次のコードを考えてみましょう。
x = "original value" squares = [x**2 for x in range(5)] print(x) # Prints 4 in Python 2!
Python 2 では、これはコードは予期せず「元の値」の代わりに 4 を出力します。これは、リスト内包表記で使用されるループ制御変数 x が、内包表記の外で定義された x を一時的に隠すためです。このシャドウイングは、理解が完了した後も継続します。
この動作は、微妙でデバッグが難しいエラーを引き起こす可能性があるため、フラストレーションの重大な原因となる可能性があります。さらに、リスト内包表記に通常伴う利便性と単純性が損なわれます。
ただし、Python 3 では、この動作は解決されました。リスト内包表記では、ループ制御変数が周囲のスコープに漏れなくなりました。これにより、常にこのように動作してきたジェネレータ式と一致します。
Python の作成者である Guido van Rossum 氏によると、リスト内包表記の元の漏れの多い実装は、最適化するために行われた「意図的な妥協」でした。彼らのパフォーマンス。しかし、Python 3 では、パフォーマンスの向上により、この妥協は不要であると考えられました。
Python 3 でのこのリーク動作の排除により、リスト内包の信頼性と一貫性が大幅に向上しました。意図しない変数シャドウイングの可能性を排除することで、プログラマはより安心して変数を使用できるようになりました。
以上がPython 2 のリスト理解スコープが Python 3 と異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。