1. 全局作用域(全局变量)
在一个.py文件内,全局变量类似于这个文件的属性,可以在任何地方调用(调用不是更改,更改还是不能随意的)
# 全局变量
m = 5
for i in range(5):
# 这里的 i 也是全局的
print(i)
print(m)
# 在这里输出 i 的值不会报错(但是解释器会有阴影提示)
print(i)
1.1 global 修改全局变量
如果想在函数内部对全局变量进行修改,需要在函数内部表明这个变量是全局的,使用关键字global:
a = '全局变量'
# global 关键字的使用:可用于在函数内更改全局变量
def printA():
global a
a = '修改后的全局变量' # 如果将上面的一行代码注释掉,则这一行相当于在函数内部又定义了一个局部变量a,不会对全局变量a进行修改
print('a --> : ', a)
print('a --> : ', a) # 输出 a --> : 修改后的全局变量
2. 局部作用域(局部变量)
在函数内部定义的变量都是局部变量,只能在函数内部进行使用,外界无法访问
def func():
c = "函数内的变量"
print('c --> : ', c)
print('c --> : ', c) # 报错,局部变量无法在函数外部进行访问
3. 嵌套作用域(总的来说也可归于局部变量)
嵌套是指函数内部又定义函数,如果在内层函数里访问了外层函数的变量,则外层函数变量所在的作用域就可理解为是嵌套作用域。
若想在内层函数中更改外层函数的变量值,需要使用关键字nonlocal进行修饰
def outerFunc():
c = "函数内的变量"
print('c --> : ', c)
e = '嵌套作用域的变量'
# nonlocal 关键字的使用:可以在嵌套函数内更改外层函数的变量
def innerFunc():
nonlocal c
c = '嵌套函数更改外层函数变量'
e = '' # 这里相当于在内层函数中定义了一个新的变量 e ,和外层函数的 e 无关
innerFunc() # 在外层函数内调用内层函数
print('c --> : ', c)
print(e) # 上面内层函数中的 e 未使用 nonlocal 修饰,此处输出结果还是外层函数的变量 e
if __name__ == '__main__':
outerFunc() # 调用外层函数