一、命名空间与作用域
在命名空间中的名称能将任何python对象作为值,在不同的命名空间中相同的名称可以与不同的对象相关联。但是,如果存在名称解析协议,则多个命名空间可以一起工作来解析名称。也就是说,如果有多个命名空间(总是有的),那么可以定义搜索的顺序,依次在不同的命名空间里来查找某个名称(或确认其不存在于任何认可的命名空间)。在python中,将这一过程定义为作用域。
1.命名空间包含:
内置命名空间:
在文件中函数声明外的的变量都属于命名空间
全局命名空间:
函数声明的变量存在的位置属于全局命名空间
局部命名空间:
局部命名空间可以是list 、tuple、str、int 等
2.作用域
作用域就是字面理解就是作用范围,按照生效范围可分为全局作用域与局部作用域
全局作用域:
全局命名空间+内置命名空间
局部作用域:
局部命名空间
3.globals()语句
可以查看全局作用域中的内容
4.locals()语句
locals()语句可以在函数的嵌套中使用,目的是查看当前作用域中的内容
1 a=10 2 def func(): 3 a= 40 4 b= 20 5 def abc(): 6 print("卡洛") 7 print(a,b) 8 print(globals()) 9 print(locals()) 10 func()
二、函数的嵌套
1.函数支持嵌套可以无限嵌套
1 a=1 2 def a_(): 3 global a 4 a=1 5 def a1_(): 6 pass 7 a1_() 8 a_()
三、关键字global与nonlocal
global表示,不再使用局部作用域的内容,而是获取全局作用域中的变量
nonlocal 表示在局部作用中,调用父级命名空间中的变量