global和nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
以下实例修改全局变量num:
#!/usr/bin/python3
num=1
deffun1():
globalnum#需要使用global关键字声明
print(num)
num=123
print(num)
fun1()
print(num)
以上实例输出结果:
1
123
123
如果要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量则需要nonlocal关键字了,如下实例:
#!/usr/bin/python3
defouter():
num=10
definner():
nonlocalnum#nonlocal关键字声明
num=100
print(num)
inner()
print(num)
outer()
以上实例输出结果:
100
100
另外有一种特殊情况,假设下面这段代码被运行:
#!/usr/bin/python3
a=10
deftest():
a=a+1
print(a)
test()
以上程序执行,报错信息如下:
Traceback(mostrecentcalllast):
File"test.py",line7,in
test()
File"test.py",line5,intest
a=a+1
UnboundLocalError:localvariable"a"referencedbeforeassignment
错误信息为局部作用域引用错误,因为test函数中的a使用的是局部,未定义,无法修改。
修改a为全局变量,通过函数参数传递,可以正常执行输出结果为:
#!/usr/bin/python3
a=10
deftest(a):
a=a+1
print(a)
test(a)
执行输出结果为:
11
本博客源码Github地址:
请随手给个star,谢谢!