沈阳做网站优化的公司,seo1域名查询,深圳做网站的企业,深圳市建设集团是国企吗1.名称空间 将栈区进行分类#xff0c;这些分类就是名称空间 名称空间存放什么名字空间个数何时创建销毁内置名称空间built-inPython解释器内置的名字1个Python解释器启动解释器关闭 全局名称空间 global Python文件内定义的类名#xff0c;变量名#xff0c;模块…1.名称空间 将栈区进行分类这些分类就是名称空间 名称空间存放什么名字空间个数何时创建销毁内置名称空间built-inPython解释器内置的名字1个Python解释器启动解释器关闭 全局名称空间 global Python文件内定义的类名变量名模块名函数名等等排除函数内部定义内置的多个Python文件执行前文件执行完 局部名称空间 local,enclosing 函数内部定义的名字(包含函数的参数)多个函数调用时调用结束后
2.名称空间的加载顺序 内置名称空间 全局名称空间 局部名称空间
3.为什么要有名称空间 栈区存在相同变量名的情况下数据会被覆盖如果划分空间就不会产生冲突
4.名称的查找顺序 整体的名称空间优先级局部名称空间 全局名称空间 内置名称空间 NameError 查找顺序判断 先判断当前名称是属于哪种名称空间根据所在名称空间开始查找如没有则向外找注意查找顺序是以定义阶段为基准的 场景1:x 10def func1():print(x)def func2():x 20func1()func2() # 10 在func2内调用func1func1里面输出x时func1内部找不到定义的x就去全局空间查找;x10是先于x20被定义的场景2:input 10def func1():def func2():print(input)func2()input 20func1() # 报错NameError,原因是在func1定义内有局部变量input所以会优先使用该局部变量但是执行的时候因为变量定义在func2()后故调用func2的时候查找不到input而报错 5.作用域 在名称空间的基础上按照作用域进行分类 全局作用域局部作用域 全局作用域 包括内置名称空间全局名称空间特点 全局存活全局有效 场景1: 想要函数内部修改全局变量需要在变量前定义global---针对不可变类型
(注意函数内部定义全局变量就不可再传该参数了)a 10def func():global aa 5return afunc()print(a) # 5 局部作用域 包括 局部名称空间特点临时存活局部有效修改局部变量的值使用nonlocal,该关键字只会作用在函数内
场景1: 函数内部的局部变量修改不会影响全局变量a 10def func(a):a * 2func(a)print(a) # 10场景2: 针对嵌套函数想要修改enclosing变量需要在变量前定义nonlocal----针对不可变类型def func1():x 10def func2():nonlocal xx 20func2()print(x) # 20func1()场景3: 嵌套函数无变量则报错def func1():def func2():nonlocal xx 30func2()print(x)func1() # SyntaxError,因为扫描func2定义的时候就去找x所在的空间func1里面没有则不会再向外去查找直接报错