Python 局部变量混乱
Python local variable confusion
我在编码 python 时遇到问题,我感到很无助:(
这是我的代码(大大简化了,因为我的代码有数百行):
def coax():
#some tkinter stuff...
text = ""
def refresh():
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)
do_something() 和 do_something_else() 是其他函数,在这种情况下无关紧要。
我现在所知道的是,通过语句 text = "Hello",它现在是一个局部变量。我不希望它成为局部变量。我想在 coax() 中更改文本变量,而不是在 refresh() 中创建新的本地变量。
我尝试使用全局(我知道这是一个非常不优雅的解决方案,不应该使用)。代码如下所示:
def coax():
#some tkinter stuff...
text = ""
def refresh():
global text
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)
这在 except 块中给了我一个“NameError: name 'text' is not defined”异常。我究竟做错了什么?我可以在哪里改进代码?
global
不起作用,因为两个 text
变量都是本地的,但它们只是处于本地的不同“级别”。要使变量引用周围函数中的另一个局部变量,请改用 nonlocal
:
def coax():
#some tkinter stuff...
text = ""
def refresh():
nonlocal text
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)
我在编码 python 时遇到问题,我感到很无助:(
这是我的代码(大大简化了,因为我的代码有数百行):
def coax():
#some tkinter stuff...
text = ""
def refresh():
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)
do_something() 和 do_something_else() 是其他函数,在这种情况下无关紧要。
我现在所知道的是,通过语句 text = "Hello",它现在是一个局部变量。我不希望它成为局部变量。我想在 coax() 中更改文本变量,而不是在 refresh() 中创建新的本地变量。
我尝试使用全局(我知道这是一个非常不优雅的解决方案,不应该使用)。代码如下所示:
def coax():
#some tkinter stuff...
text = ""
def refresh():
global text
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)
这在 except 块中给了我一个“NameError: name 'text' is not defined”异常。我究竟做错了什么?我可以在哪里改进代码?
global
不起作用,因为两个 text
变量都是本地的,但它们只是处于本地的不同“级别”。要使变量引用周围函数中的另一个局部变量,请改用 nonlocal
:
def coax():
#some tkinter stuff...
text = ""
def refresh():
nonlocal text
try:
do_something(text)
text = "Hello"
except:
do_something_else(text)