python防止全局变量导出

Python021

python防止全局变量导出,第1张

全局变量不是坏事。邪恶的是把它当作一个可变的变量。全局变量应尽可能保持静态和"不变"。如果你不得不改变globals.py中的字典内容,那就没用了。除此之外,因为阅读是可以的。

是的,全局"常量"是可以的,应该避免全局"变量"。

好吧,我明白你们两个的意思,但是我仍然没有看到一个有效的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