变量作用域其实就是相当于变量的命名空间,赋值过的变量并不是在哪里都可以使用,如何定义变量决定了变量可以在哪里被使用,Python 中变量赋值的位置 决定了 那些范围内的对象可以访问这个变量,这个范围就被成为变量域。
Python中有两种最基本的变量作用域:局部变量和全局变量。
局部变量
一般情况下,在函数内部赋值的变量,不做特殊声明的都是局部变量,顾名思义,局部变量的作用域是局部的,在当前函数赋值则只能在当前使用。
如果在函数体中第一次出现的,就是局部变量:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
def hankai_ceshi():
x = "韩锴"
print (x)
y = "汉"
print (y)
hankai_ceshi()
执行结果如下:
韩锴
汉
可以看到,函数内正确打印出了 ”x“,”y“变量的内容,x,y 是在函数体内被赋值的,所以 变量是局部变量,局部变量只能在函数体内被访问,超出函数体的返回就不能正常执行。例如:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
def hankai_ceshi():
x = "韩锴"
print (x)
y = "汉"
print (x,y)
hankai_ceshi()
print (x,y)
执行结果如下:
韩锴
韩锴 汉
Traceback (most recent call last):
File "D:/python/PyCharm 2021.1.2/mysql_cnf.py", line 11, in
print (x,y)
NameError: name 'x' is not defined
从结果来看,在函数体内的print() 执行成功,有返回值,函数体外的print() 执行失败,并且收到错误的信息:“x” 没有定义。
不只在函数体内赋值的变量是局部变量,函数定义时的参数也是局部变量,例如:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
def hankai_ceshi(x):
print (x)
hankai_ceshi("韩锴")
print (x)
执行结果:
韩锴
Traceback (most recent call last):
File "D:/python/PyCharm 2021.1.2/mysql_cnf.py", line 8, in
print (x)
NameError: name 'x' is not defined
这个例子和上一个例子都得到相同的结果,在函数体内的 print() 成功执行,但是函数体外的 print() 执行失败,并且收到错误的信息:x 没有定义,这就说明函数声明时的参数也是局部变量
全局变量
在函数外赋值的变量就是全局变量,全局变量可以在整个程序范围内被访问,例如:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
x = "韩锴"
def hankai_ceshi():
print (x)
hankai_ceshi()
print (x)
执行结果:
韩锴
韩锴
从执行结果看,可以知道,函数hankai_ceshi中 print() 。被正常执行,说明函数外的变量可以正常地在函数体内访问,但是,函数体内的重新赋值的相同函数名字并不会改变函数体外的全局变量:例如:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
x = "函数体外:韩锴"
def hankai_ceshi():
x = "函数体内:汉"
print (x)
hankai_ceshi()
print (x)
执行结果:
函数体内:汉
函数体外:韩锴
从执行结果中,可以看到,函数hankai_ceshi,对”x“ 进行赋值操作时,并没有改变函数体外的”x“变量,说明如果在函数体内对”x" 进行修改,(其实时创建了一个新的变量,只是名字与函数体外的”x“ 变量相同),但并不会修改 函数体外的”x“值
如果想对函数体外的变量进行修改,应该怎么操作,这就需要使用"global" 关键字,例如:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
x = "函数体外:韩锴"
def hankai_ceshi():
global x
x = "函数体内:汉"
print (x)
hankai_ceshi()
print (x)
执行结果:
函数体内:汉
函数体内:汉
从执行结果,可以知道,在函数体内修改全局变量”x” 为 函数体内,函数体外的全局变量“x” 也变成了 函数体内,所以如果要在函数体内修改 全局变量,就一定要添加 “global” 关键字



