全局变量和局部变量
全局变量:定义在函数外的变量
局部变量:定义在函数内部变量
获取变量值时候先获取当前作用域变量名称和变量值,如果没找到到上一层作用域招变量的值,在没有就报错,先获取局部变量,没有获取全局变量
2,局部变量
def test01():
a=10
print('修改前',a)
a=20
print('修改后',a)
def test02():
a=40
print('我是02的a',a)
test01()
test02()
局部变量就是函数内部定义的变量
不同函数,可以定义相同名字局部变量,互相不影响
3.全局变量
全局变量是声明在函数外部的变量,定义在函数外的拥有全局作用域
例子1:
a=100
print('打印全局变量:',a) def test1():
print('test1中使用全局变量',a)
def test2():
print('test2中使用全局变量',a)
test1()
test2()
例子2:
#全局变量与局部变量同名
a = 10 #全局变量
print("全局变量a:%d"%a)
def test01():
a = 20
print("test01中的a:%d"%a)
def test02():
print("test02中的a:%d"%a) test01()
test02()
当全局变量与局部变量同名时,优先使用局部变量
修改全局变量(global关键字)
a=100
print('全局变量',a)
def test1():
global a
a=200
print('test1中修改全局变量a',a)
def test2()
print('tes2中使用全局变量',a)
test1()
global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
以下实例修改全局变量 num:
#!/usr/bin/python3
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
以上实例输出结果:
1
123
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:
#!/usr/bin/python3
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
以上实例输出结果:
100
100
另外有一种特殊情况,假设下面这段代码被运行:
#!/usr/bin/python3
a = 10
def test():
a = a + 1
print(a)
test()
以上程序执行,报错信息如下:
Traceback (most recent call last):
File "test.py", line 7, in <module>
test()
File "test.py", line 5, in test
a = a + 1
UnboundLocalError: local variable 'a' referenced before assignment
错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改。