1.命名空间
命名空间是名字和对象的映射,也可以把namespace理解为一个字典,举一个通俗的例子,如果把我们的工程当做一个一栋楼,则这个工程文件里面的.py文件可以当成我们的命名空间.
2.命名空间的种类
1.局部 :函数内部的命名空间就是局部变量
2.全局: 模块内(.py文件)的命名空间就是全局的
3.内置: 系统自带的命名空间
4.闭包: 嵌套的父级函数的局部作用域,即包含此函数的上级函数的作用域
3.范围作用域
内置 > 全局 > 闭包 > 局部
4.作用域
作用域是python程序的某一段或者某些段,在这些地方,摸个命名空间中的名字可以直接引用.
5.查找顺序
6.global
全局命名空间的变量,在函数体外声明的默认就是global
7.nonlocal
非全局)变量
错误示例:
def outer(): num = 10 # 第二歩 def inner(): # # nonlocal num num += 5 # 第四歩 print(num) # 第五步 inner() # 第三步 print(num) # 第六步 # 5 # 5 outer() # 第二歩
错误输出
UnboundLocalError: local variable 'num' referenced before assignment
这是由于python对变量的搜索机制引起的:
如果有一个函数内部的变量赋值 ,该变量被认为是本地的,所
以如果有修改变量的值就会变成局部变量。
也就是说在num += 5这一行num被认为是inner函数内部的局部变量,并不是inner里面的,
所以会报错。