4. Python中的变量作用域和global/nonlocal关键字的使用

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()	# 调用外层函数

持续更新中,请大家多多关注…

猜你喜欢

转载自blog.csdn.net/FY_13781298928/article/details/129706538