その変数をグローバル スコープに保持し、globalステートメントを使用してアクセスすることをお勧めします。
globalキーワードを使用すると、関数の呼び出し元に同じ名前の別の変数が存在する場合でも、グローバル名前空間内の変数を参照できます。
例: これは "tangerine" を出力します。
def foo():
def bar():
return fruit
fruit = "tangerine"
return bar2()
fruit = "banana"
print(foo()) # will print "tangerine"
しかし、これは「バナナ」を出力します。
def foo2():
def bar2():
global fruit # fetch me the fruit in the global scope
return fruit
fruit = "tangerine"
return bar2()
fruit = "banana"
print(foo2()) # will print "banana"
global キーワードがない場合、インタープリターは参照しようとしている変数を見つけるために「LEGB ルール」に従います。
- ローカルスコープ: まず、関数ステートメントが実行されているスコープであるローカル スコープで変数を検索します。ローカル スコープは、関数が呼び出されるたびに作成されます。
- エンクロージング スコープ: 次に、インタープリターは「エンクロージング関数ローカル」で変数を探します。これは、関数が挿入される (宣言される) 関数です。これは、bar()内のreturn fruitステートメントでfruit変数が見つかる場所です。
- G lobal: 上記の名前空間で変数が見つからない場合、Python はグローバル変数の中からそれを見つけようとします。globalステートメントを使用すると、Python はグローバル スコープでのみ検索するようになり、1 と 2 はスキップされます。
- B uiltins: 最後に、Python は組み込み関数と定数の中から変数を見つけようとします。ここには魔法はありません。
上記のすべての検索で変数名が見つからない場合、Python はNameError例外を発生させます。
$ NameError: name 'fruit' is not defined
次に、次のことができます。
def choosingFunction():
global option
if option == 0:
doThis()
elif option == 1:
doThat()
elif option == 2:
doTheOtherOne()
else:
doWhateverYouFeelLike()
>> option = 2
>> import choosingModule
>> choosingModule.choosingFunction()
あなたのものを呼び出しているモジュール内のグローバル変数の存在に依存することは非常に悪い習慣と見なされ、深刻なことには使用してはならないことに注意してください。;)
globalステートメントの詳細については、次のドキュメントを確認してください: Python 3.xおよびPython 2.7。スコープと名前空間のルールについては、こちら (Python 3.x) またはこちら (Python 2.7) を確認してください。