[转载]python实现 全局变量的用法大全汇总
原文地址:python实现 全局变量的用法大全汇总作者:tiancg_vfx_td 应该尽量避免使用全局变量。不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性。对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误。这种错误是很难发现和更正的。 全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量。 global语句被用来声明x是全局的-因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。 你可以使用同一个global语句指定多个全局变量。例如global x, y, z。 但是某些时候,全局变量能够解决局部变量所难以解决的问题。事物要一分为二。 python里面全局变量有两种灵活的用法: 1 声明法 在文件开头声明全局变量variable, 在具体函数中使用该变量时,需要事先声明 global variable,否则系统将该变量视为局部变量。 constant = 0 (将全局变量大写便于识别) def modifyconstant : global constant print constant constant += 1 ret rn if __name__ == __main__ : modifyconstant print constant 2模块法(推荐) 把全局变量定义在一个单独的模块中: #gl.py gl_1 = hello gl_2 = world 在其它模块中使用 #a.py import gl def hello_world print gl.gl_1, gl.gl_2 #b.py import gl def f n1 gl.gl_1 = hello gl.gl_2 = world 第二种方法,适用于不同文件之间的变量共享,而且一定程度上避免了开头所说的全局变量的弊端,推荐！ python实现全局变量的两种解决办法 目标:全局变量 先看程序: co nt = 0 def f c(co nt): print co nt co nt += 1 for i in range(0, 10): f c(co nt) 结果是: 不是我们想要的结果。 1、解决之道一-全局变量: global a a = 3 def f c: global a print a a = a + 1 if __name__ == "__main__": global a for i in range(10): f cprint hello print a 结果: 注意要领: 哪里需要全局变量,哪里声明一下；但是函数尽量不要传输出参数,以免造成混淆,使用ret rn var1,var2...的方法,更为直观方便,但并非不可以。 f c(o tp t)也是可以实现的。 2、解决之道二-列表:注意此种做法也适用于 maya mel语言。并可以实现函数形参中的数据输出功能。 函数中的形参一般只能用于函数的数据输入,都是局部变量,例如 f c(var1,var2) ,那么,如何实现形参的数据输出呢,其实也就是全局定义呢？这里同样可以使用 列表变量来实现； 例如: def f c(inp t=0, o tp t = []): o tp t.append(inp t+1) #定义全局变量用于存储输出结果 g_o tp t= [] #函数引用全局变量 f c(1,g_o tp t) f c(1,g_o tp t) f c(1,g_o tp t) f c(1,g_o tp t) f c(1,g_o tp t) #输出结果 print g_o tp t 运行结果 [2, 2, 2, 2, 2] == 大家可以看明白吗,其实列表的名称,就是一种类似指针和引用的数据类型,只保存列表的地址,所以可以实现全局控制的作用。同样我们也可以通过列表来访问函数外部数据；