参考网址
blog.csdn.net/weixin_4934…
总结
- 全局变量就是放在函数外面的变量(在.py模块中的函数之外的变量)
- 函数内可以直接访问全局变量
- 函数内定义的变量是局部变量local
- 同名的局部变量会覆盖全局变量,但是仅会在具体的函数内生效
- 函数内修改全局变量需要用global,这样才会从根本上修改该变量,否则都只是在函数内生效。
- 全局变量不是真的全局变量,只是在模块内全局变量(不能直接import到其他文件中)
1/什么是全局变量global
就是在模块(.py)的任意地方都可以被调用的变量就是全局变量。
我们之所以使用全局变量,是因为我们希望这些变量不要被随意修改。
为了区分,我们一般用大写字母来定义全局变量。
全局变量是可以被修改的
使用模块法管理全局变量:
我们平时在开发项目的时候,在packager中创建一个文件,global_attr_list.py文件,
把所有的全局变量都放在这个global_attr_list.py文件中
然后在别的.py文件中使用全局变量的时候,导入该文件即可:import global_attr_list,
然后使用其中的全局变量,例如:
下面是存放全局变量的.py文件(这就是以模块的方式来管理全局变量)
global_list.py:
GLOBAL_A = 'hello'
GLOBAL_B = 'world'
test.py:
import global_list
def tt():
print( global_list.GLOBAL_A )
if __name__=='__main__':
test.py
hello
2/什么是局部变量local
在函数内定义的变量就是局部变量,如果不将其变成全局变量,则该变量就只能在函数内被使用。
3/全局变量和局部变量之间的关系
一般来说:
<0> 全局变量和局部变量是可以重名的
<1> 在函数外定义的变量就是全局变量
<2> 在函数内定义的变量就是局部变量,在函数声明/函数定义中的参数的变量也是局部变量
<3> 局部变量只能在当前函数内中使用,外部不能使用,也就是外部访问不到。
<4> 如果想在函数内定义一个全局变量,需要用到global关键词,来声明这个变量是全局变量
<5> 当我们在函数内去使用一个变量的时候,首先会在这个函数内部找有没有这个变量(找的就是局部变量)
如果有,那么就使用函数内的这个局部变量,
如果在函数内部没有这个变量,那就去函数外找有没有这个变量(此时就是全局变量),
如果有,则使用函数外部这个全局变量,
如果函数外部也没有这个变量,则直接报错,NameError,name is not defined.
<6> 如果必须在函数内定义一个变量,然后在函数外使用的话,则必须使用global关键词来声明这个变量是全局变量,这样脚本的其他地方就可以访问这个变量
hou.py
name = "helloworld"
def f1():
name = "aaa"
print(name)
def f2():
print(name)
f1()
f2()
sun.py
name = "helloworld"
def f1():
global name
name = "xxx"
print(name)
def f2():
print(name)
全局变量可以在函数中直接访问
全局变量可以在函数中直接被访问,这里说的是:直接读取他的值,而不是改写它
a = 8
def f1():
print(a)
f1()
>>> 8
同名的局部变量会覆盖全局变量
a = 10
def f3():
a = 18
print(a)
f3()
print(a)
>>> 18
>>> 10
在函数内,彻底的修改全局变量
从上面的例子可以知道,在函数内修改全局变量,只是暂时的,只是在函数内生效。
要想彻底的修改全局变量,则需要用global关键字
a = 10
def f3():
global a
a = 18
print(a)
f3()
print(a)
>>> 18
>>> 18
a = 10
def f3():
global a
a = 18
print(a)
f3()
def f4():
print(a)
f4()
print(a)
>>> 18
>>> 18
>>> 18
如果全局变量是list类型,那么在函数内直接修改该变量,是可以改变全局变量的
a = [11, 22, 33]
def f():
a.append(44)
print(a)
f()
print(a)
[11, 22, 33, 44]
[11, 22, 33, 44]
a = "111"
def f():
a = "222"
print(a)
f()
print(a)
222
111
在1个函数内用global定义的全局变量,可以在别的函数内被使用
def f():
global a,c
a = "222"
c = 111
print(a)
f()
def f1():
print(a)
print(c)
f1()
222
222
111