作用域
"""
作用域
域指的是区域,范围,作用域指的就是作用区域,作用范围,有效范围
简单的说就是名字的有效范围
存储名词的有三个地方
内置名称空间
全局名称空间
局部名称空间
全局作用域
由于,内置名称空间的名字与全局名称空间的名字,可以在任何位置来访问,
所以它们俩可以划到同一个范围,称之为全局范围即全局作用域
局部作用域
局部名称空间的名字只能在当前的函数中访问,所以它单独划到一个范围中,
这个范围称之为局部作用范围即局部作用域
global(全局) 与 nonlocal(不使用本地) 关键字
global
当需要在函数内部修改全局中名字的值时需要使用global
注意,必须在使用这个名字之前声明(写)global
nonlocal(不使用本地)
当需要在内层函数中修改外层函数中的名字是就需要使用nonlocal
会一层一层往外找,直到找到了为止,但是只能找函数中的不能找到全局的名字
"""
# def f1(): # a =1 # def f2(): # nonlocal a #声明我要修改外层a 而不是定义一个新的 # a=2 # # print(a) # f2() # print(a) # f1()
下面的代码 说明只能一层一层往外找直到找到为止,并且只能找局部变量 ,不会找到全局比那两,如f2中a=2删掉,则会往f1中找。
a = 0 def f1(): a = 1 def f2(): a=2 def f3(): nonlocal a a = 3 f3() print("f2 中的a", a) f2() print("f1 中的a",a) f1() print("全局的a",a)