引入两个示例:说明 局部作用域对全局作用域的变量(此变量只能是不可变的数据类型)只能进行引用,而不能进行改变,只要改变就会报错
eg:1 >>> a=1 >>> def func(): print(a) >>> func() 1 eg:2 >>> a=1 >>> def func(): a+=1 //修改全局变量 >>> func() //运行失败 Traceback (most recent call last): File "<pyshell#62>", line 1, in <module> func() File "<pyshell#61>", line 2, in func a+=1 UnboundLocalError: local variable 'a' referenced before assignment
如果遇到局部作用域去改变全局作用域的一些变量的需求,这怎么做呢?这就得用到关键字global:
(1)global第一个功能:在局部作用域中可以更改全局作用域的变量。
>>> count=1 >>> def search(): global count count=2 >>> search() >>> print(count) 2 >>>
(2)利用global在局部作用域也可以声明一个全局变量
>>> def a(): global local //局部作用域中将local声明为全局变量 local=1 print(local) >>> a() 1 >>> print(local) //没有声明,运行会报错 1
所以global关键字有两个作用:
1,声明一个全局变量。
2,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。
重点:global在函数间的作用
# a.py
def out():
## global关键字作用
global en
en = 1
other()
print(out.__globals__['en'])
## 调用other可以打印en
def other():
print(en)
#b.py
from a import *
## b 文件没执行过a文件的out函数,也就是global还没定义
# print('这个是out的:',out.__globals__['en']) # KeyError: 'en'
def b():
## 执行out,global被定义
out()
## 打印out函数的globals
print('这个是out的:',out.__globals__['en'])
## 打印b函数的globals
#print('这个是b的:',b.__globals__['en']) # KeyError: 'en'
b()
print('这里是分割线'.center(150,'-'))
## out函数执行过后,global已经被定义
print('这个是out的:',out.__globals__['en'])
# print(b.__globals__['en']) # KeyError: 'en'
运行结果:
1 1 这个是out的: 1 ------------------------------------------------------------------------这里是分割线------------------------------------------------------------------------ 这个是out的: 1 Process finished with exit code 0
可以得知,如果执行了对应函数,global定义的函数内会存入对应变量,其他函数内则不会存入