我建议您将该变量保留在全局范围内,并使用global语句访问它。在
关键字global允许您在全局命名空间中引用变量,尽管函数调用方上存在另一个同名的变量。在
例如:这将打印“橘子”def foo():
def bar():
return fruit
fruit = "tangerine"
return bar2()
fruit = "banana"
print(foo()) # will print "tangerine"
但这会印上“香蕉”。在
^{pr2}$
如果没有global关键字,解释器将遵循“LEGB rule”来查找您试图引用的变量:Local Scope:首先,它将在local范围内搜索变量,即执行函数语句的范围。每次调用函数时都会创建局部作用域。在
Enclosing作用域:其次,解释器将在“封闭函数局部变量”中查找变量,即插入(声明)函数的函数。这就是fruit变量在bar()内的return fruit语句中找到的地方。在
Global:如果在上面的名称空间中找不到该变量,python将尝试在全局变量中找到它。使用global语句会迫使python只在全局范围内查找它,因此跳过1和2。在
Builtins:最后,python将尝试在内置函数和常量中查找变量。这里没有魔法。在
如果以上所有搜索都找不到变量名,python将引发一个namererror异常:$ 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。
有关范围和名称空间规则的信息,请检查here(python3.x)或{a4}(python2.7)。在