变量作⽤域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量。
#1.局部变量:所谓局部变量是定义在函数体内部的变量,即只在函数体内部⽣效。 def testA(): a = 100 print(a) testA() # 100 #print(a) # 报错:name 'a' is not defined #变量a是定义在 testA 函数内部的变量,在函数外部访问则⽴即报错。 #局部变量的作⽤:在函数体内部,临时保存数据,即当函数调⽤完成后,则销毁局部变量。 #2.全局变量:所谓全局变量,指的是在函数体内、外都能⽣效的变量。 # 定义全局变量a a = 200 def testA(): print(a) # 访问全局变量a,并打印变量a存储的数据 def testB(): print(a) # 访问全局变量a,并打印变量a存储的数据 testA() # 200 testB() # 200
二、正常情况下,局部变量和全局变量名字相同是,局部变量数值改变,全局变量的数值不改变。
a = 100 def testA(): print(a) def testB(): a = 200 print(a) testA() # 100 testB() # 200 print(f'全局变量a = {a}') # 全局变量a = 100testB 函数内部的 a = 200 中的变量 a 是在修改全局变量 a 吗? 很明显不是。观察上述代码发现, 15 ⾏得到 a 的数据是 100 ,仍然是定义全局变量 a 时候的值,⽽没有返回。 testB 函数内部的 200 。综上: testB 函数内部的 a = 200 是定义了⼀个局部变量。 三、如何在函数体内部修改全局变量?( global 关键字解决这个问题 )
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