注意: これは、関数本体内のグローバル変数を変更する方法に関する質問ではありません。global
キーワードはわかりました。
私のスクリプトには、多数のグローバル構成変数があります。modified_procedure()
これらのグローバル変数の 1 つをローカル名前空間 (以下で呼び出します) にシャドウイングし、構成変数を参照する別の関数を呼び出す関数を書きたいと思います。すなわち、
PARAMETER = 1
def procedure():
return PARAMETER * 3
def modified_procedure():
PARAMETER += 1
return procedure()
PARAMETER
の本体で発生するため、これは失敗しますmodified_procedure()
。インタープリターはそれをローカル変数と見なし、グローバル名前空間で検索しません。グローバル変数を変更しようとしているわけではありませんPARAMETER
。modified_procedure()
の名前空間でシャドウしようとしています。
いくつかの不便な解決策を考えることができます。
- スクリプトを OOP 化して、構成変数がオブジェクト属性になるようにし、新しい属性を持つサブクラスを作成できるようにします。
procedure()
- in を使用
global
しmodified_procedure()
て変更PARAMETER
し、結果を返す前に復元します。procedure()
シャドーイングでできますPARAMETER
か?もしそうなら、どのように?