变量作用域指的是变量生效的范围,主要分为两类:局部变量和全局变量。
- 局部变量
所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效。
def testA():
a = 100
print(a)
testA() # 100
print(a) # 报错:name 'a' is not defined
变量a是定义在 testA 函数内部的变量,在函数外部访问则立即报错。
- 全局变量
所谓全局变量,指的是在函数体内、外都能生效的变量。
思考:如果有⼀个数据,在函数A和函数B中都要使用,该怎么办?
答:将这个数据存储在⼀个全局变量里面。
# 定义全局变量a a = 100
def testA():
print(a) # 访问全局变量a,并打印变量a存储的数据
def testB():
print(a) # 访问全局变量a,并打印变量a存储的数据
testA() # 100
testB() # 100
思考: testB 函数需求修改变量a的值为200,如何修改程序?
a = 100
def testA():
print(a)
def testB():
a = 200
print(a)
testA() # 100
testB() # 200
print(f'全局变量a = {a}') # 全局变量a = 100
思考:在 testB 函数内部的 a = 200 中的变量a是在修改全局变量 a 吗?
答:不是。观察上述代码发现,最后一行代码处得到a的数据是100,仍然是定义全局变量a时候的值,而没有返回testB 函数内部的200。
综上: testB 函数内部的 a = 200 是定义了一个局部变量。
思考:如何在函数体内部修改全局变量?
a = 100
def testA():
print(a)
def testB():
# global 关键字声明a是全局变量
global a
a = 200
print(a)
testA() # 100
testB() # 200
print(f'全局变量a = {a}') # 全局变量a = 200