execのローカル変数への影響:
のダイビング、エグゼクティブ関数、動的コード実行のためのPythonステープルは興味深いクエリを提起します:関数内のローカル変数を更新できますか? DiLemma
Python 3では、次のコードスニペットは、予想されるようにローカル変数を更新できません。 a = 1 exec( "a = 3") print(a)
予想される「3」の代わりに、「1」を印刷します!
def f(): a = 1 exec("a = 3") print(a)def foo(): ldict = {} exec( "a = 3"、globals()、ldict) a = ldict ['a'] print(a)
exec()
Python 3ドキュメントは、execを使用している間にデフォルトのローカル()辞書を変更することに対して明示的に警告します。予測不可能な行動。安全のために、ローカル変数を更新する場合は、常に明示的な地元の辞書を執行する必要があります。バグレポートは、ローカル変数のPython 3の最適化が現在の動作につながったことを強調しています。カスタムエグゼクティブ機能をPythonの独自の機能と区別することができないコンパイラは、特別な治療を提供することはできません。したがって、デフォルトのexecは地元の人々を変更することはできません。これにより、コンパイラの組み込み幹部の特別な取り扱いにより、ローカル変数を動的に変更することができました。ローカル変数を変更するためのアプローチの変更。明示的な地元の辞書を採用することにより、開発者はローカル変数を制御しながら、動的コード実行の力を活用できます。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3