22

locals() 関数のドキュメントでは、インタープリターがローカル スコープの変更を反映しない可能性があるため、その出力を変更しないように特に警告しています。これは、CPython で動作するにもかかわらず、Python 仕様で必要とされていないことを意味していると思います。

これが globals() でも同じかどうか知りたいです。documentationには警告はありませんが、各関数が明らかに異なるスコープで同じアクションを実行するため、これが異なるのは奇妙だと思います。

安全であれば、globals() の出力を変更すると、私が取り組んでいるプロジェクトのシンプルさと互換性が向上します。

4

1 に答える 1

27

CPython であっても、変更は確実にlocals() 機能しません。locals()たまたまモジュールとクラスのスコープで機能しますが、関数内で失敗します (その場合、本物への参照ではなくローカル名前空間のコピーを提供するため、変更は「かかりません」 )

ただし、それは常にモジュールの名前空間を参照し、モジュールの名前空間は通常の辞書のように動作する必要があるため、globals()異なります。そうです、警告がないことは見落としではなく、実際に許可されています。globals()

于 2011-05-11T03:44:47.053 に答える