意外的全局变量行为

我看到的东西让我认为我错过了一些东西
全球VAR的行为如何.我已经定义了一个全局字符串,就在
启动我的.py文件.
OUTXMLFILE =" ABC"
我定义一堂课,并在下面做很多事情.然后我有
另一个类,其中有一个" def"的方法:
Def OnoutFileButton(Self,EVT):
(fpath,fname)= os.path.split(fullname)
打印"选定的输出文件:" + fname
OUTXMLFILE = fname
打印"输出文件:" + OUTXMLFILE
在项目中的其他地方随机打印语句,显示Outxmlfile
然而,在此def中打印为" abc",它与fname一样.
(例如" myfile.xml")如果OUTXMLFILE的打印行是在
分配给fname,它会引发错误:
UnbounlocalError:之前引用的本地变量" OUTXMLFILE"
任务
如果我删除了" OUTXMLFILE = fname"的行
然后打印语句给我一个值" abc"的值
我想念什么?当我分配一个值以更新我的全局变量时,
它成为局部变量.如果我不尝试更新它,它将停留
全球的.我认为这就像一个常数,尽管我有几个
全球列表,我似乎可以将他们附加在一起.
我想我可以将变量将
方式,但想了解我的方式的错误...
罗斯.

# 回答1


rgeek写道:http://docs.python.org/ref/naming.html
"如果名称绑定操作发生在代码块中的任何地方,则所有
块中名称的使用被视为对
当前块.当使用一个名称时,这可能会导致错误
在绑定之前阻止它."
要解决此问题,请使用全球指令:http://docs.python.org/ref/global.html
Def OnoutFileButton(Self,EVT):
全局OUTXMLFILE#标志变量为全局
fpath,fname = os.path.split(fullname)
打印"选定的输出文件:",fname
OUTXMLFILE = fname
...
# 回答2


非常感谢Fredrik,
当我读到您的笔记时,一波大浪潮越过了我.那咬了一次
以前,这是我以前唯一与"全球"指令的跑步
显然没有坚持我. :(
感谢您的简洁,有益的答复.宇宙再次有意义.
- 罗斯.
弗雷德里克·伦德(Fredrik Lundh)写道:

标签: python

添加新评论