首页 / PYTHON / 【python基础】命名空间
【python基础】命名空间
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【python基础】命名空间,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3230字,纯文字阅读大概需要5分钟。
内容图文
一、命名空间的定义
变量名和变量值的映射
命名空间是用字典实现, key就是变量的名,value就是变量值
二、命名空间的分类
python程序执行的过程中, 同时会有2-3个活动的命名空间(函数调用时,有3个命名空间, 函数调用结束后,有两个命名空间)
根据变量的位置, 将命名空间分为三类:
局部命名空间:Local, 指的是函数所拥有的命名空间, 包括函数的入参,函数内部的局部变量
全局命名空间:Global, 指的是模块(.py文件)所拥有的命名空间, 包括函数, 类, 全局的变量,导入模块中的内容
内建命名空间:Build-in, 指的是python内置的函数和异常.
同一个命名空间中,变量名不能重复; 不同的命名空间之间,变量名互不影响
三、命名空间的生命周期
局部命名空间:函数调用的时候创建, 函数调用结束后被删除
全局命名空间:模块被加载的时候创建, python解释器退出的时候被删除
内建命名空间:随着python解释器的启动而创建, python解释器退出的时候被删除
四、命名空间的访问
locals() 用这个函数可以访问到局部的命名空间
globals() 用这个函数可以访问到全局的命名空间
标准的情况是:
在局部中, 使用locals()
在全局中, 使用globals()
特殊情况:
在局部中, 使用globals(), 查看到的不是全局命名空间中所有的内容
而是, 在局部中能访问到的全局命名空间中的内容
五、命名空间的创建顺序
python解释器启动 --> 创建内建命名空间 --> 加载模块 --> 创建全局命名空间 --> 函数的调用 --> 创建局部命名空间
六、命名空间的销毁顺序
函数的调用结束 --> 销毁局部命名空间 --> python解释器退出 --> 销毁全局命名空间 --> 内建命名空间
总结一下: 局部命名空间是随着函数的调用动态的创建出来的, 随着函数调用的结束动态销毁的
七、作用域
1、概念:针对变量而言, 程序执行的过程中,变量能够起作用(可应用)的范围
* 只有 函数, 类, 模块 会产生作用域, 代码块不会产生作用域
2、作用域的分类:
根据变量的位置,可以将作用域分为四类(LEGB)
Local:局部作用域(函数内部的作用域)
Enclosing:封闭作用域(两层函数嵌套, 外层嵌套函数的作用域)
Global:全局的作用域(模块的作用域)
Bulid-in:内建的作用域(python内置的)
3、作用域的查找规则, 遵循LEGB法则
按顺序依次在局部作用域,封闭作用域,全局作用域,内建作用于中进行查找,一旦查找到了,就不会继续进行查找
如果在LEGB中都没有查找到, 则会发生异常: NameError: name 'abc' is not defined
(1)局部作用域中可以访问到 局部作用域, 封闭作用域, 全局作用域, 内建作用域中的变量
(2)封闭作用域中可以访问到 封闭作用域, 全局作用作用域域, 内建作用域中的变量
封闭作用域不能访问到局部作用域中的变量
(3)全局作用域中可以访问到 自己和内建作用域中的变量
不能访问到封闭作用域和局部作用域中的内容
八、区别
局部变量: 在函数内部声明的变量, 只在函数中有效
全局变量: 在模块中声明的变量, 在整个模块中有效
全局变量是不可变数据类型, 函数无法修改全局变量的值
全局变量是可变数据类型时, 函数可以修改全局变量的值
(如果给函数传递的参数是 全局可变类型数据, 在函数多次调用的过程中, 全局变量会发生改变)
九、关键字
global : 在局部作用域中标记一个变量为全局变量
可以将局部变量变成一个全局变量
nonlocal : 在局部作用域中标记一个变量是外层封闭作用域中的变量
可以修改外层(非全局)变量
内容总结
以上是互联网集市为您收集整理的【python基础】命名空间全部内容,希望文章能够帮你解决【python基础】命名空间所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。