是的,全局"常量"是可以的,应该避免全局"变量"。
好吧,我明白你们两个的意思,但是我仍然没有看到一个有效的python替代我提出的设计,在这个设计中,加载的数据字典可能会随着时间的推移而发展(新加载的文件,删除的文件)
应该避免使用全局变量,因为它们会抑制代码重用。多个小部件/应用程序可以很好地活在同一个主循环中。这允许您将您现在所认为的单个GUI抽象到一个库中,该库根据请求创建此类GUI,以便(例如)单个启动程序可以启动多个共享同一进程的顶级GUI。
如果使用全局变量,这是不可能的,因为多个GUI实例将胜过彼此的状态。
全局变量的替代方法是将所需的属性与顶级小部件相关联,并创建指向相同顶级小部件的子小部件。然后,例如,菜单操作将使用它的顶级小部件访问当前打开的文件,以便对其进行操作。
定义一个py文件使用get和set方法设置和获取变量如在gol.py中
使用时如下在gol_test1.py中:
在gol_test2.py中
在python中,全局变量一般有两种使用方式:第一种:是在一个单独的模块中定义好,然后在需要使用的全局模块中将定义的全局变量模块导入。
第二种:直接在当前的模块中定义好,然后直接在本模块中通过global声明,然后使用具体的方法如下所示:
第一种:
复制代码
SOLR_URL='http://solr.org'
def tt():
global SOLR_URL
SOLR_URL=SOLR_URL+'#aa'
if __name__=='__main__':
tt()
print SOLR_URL
#输出:
http://solr.org#aa
复制代码
PS:在此种用法中,如果我们在函数tt中不使用global 声明全局变量SOLR_URL,其实也可以使用,但是此时应该是作为一个内部变量使用,由于没有初始值,因此报错Python查找变量是顺序是:先局部变量,再全局变量复制代码
SOLR_URL='http://solr.org'
def tt():
#global SOLR_URL
SOLR_URL=SOLR_URL+'#aa'
if __name__=='__main__':
tt()
print SOLR_URL
#输出:
SOLR_URL=SOLR_URL+'#aa'
UnboundLocalError: local variable 'SOLR_URL' referenced before assignment复制代码
第二种:
global_list.py
GLOBAL_A='hello'
GLOBAL_B='world'
test.py
复制代码
import global_list
def tt():
print global_list.GLOBAL_A
if __name__=='__main__':
tt()
#输出:
hello