局部变量修改全局变量
在函数内,无论嵌套多少层,都可以查看到全局作用域的名字,
若要在函数内修改全局名称空间中名字的值,
当值为不可变类型时,则需要用到global关键字
x=1
def foo():
global x #声明x为全局名称空间的名字
x=2
foo()
print(x) #结果为2当实参的值为可变类型时,函数体内对该值的修改将直接反应到原值,
num_list=[1,2,3]
def foo(nums):
nums.append(5)
foo(num_list)
print(num_list)
#结果为
[1, 2, 3, 5]nonlocal、global关键字
global关键字
在函数内部修改全局变量,需要使用global关键字
global关键字可以声明当前局部变量为全局变量,从而实现修改局部变量结果全局变量也被修改
a = 100
def zzw():
global a # 使用global对变量进行声明,可以通过函数修改全局变量的值
a = 10 # 此时,全局变量的值变为10
print('函数内部:',a)
zzw()
print('函数外部:',a)
# 函数内部: 10
# 函数外部: 10nonlocal关键字
对于嵌套多层的函数,使用nonlocal关键字可以将名字声明为来自外部嵌套函数定义的作用域(非全局)
nonlocal关键字,可以将当前局部变量向外部跨越一层,
如果当前函数外部是全局,则可以实现将函数内的局部变量声明为全局变量
def f1():
x=2
def f2():
nonlocal x
x=3
f2() # 调用f2(),修改f1作用域中名字x的值
print(x) # 在f1作用域查看x
f1()
# 结果
3nonlocal x会从当前函数的外层函数开始一层层去查找名字x,若是一直到最外层函数都找不到,则会抛出异常
















