浅析Python的命名空间与作用域


Posted in Python onNovember 25, 2020

名称空间

名称空间(namespaces):用于存放名字与内存地址绑定关系的地方,是对栈区的划分
作用:名称空间可以使栈区中存放相同的名字,从而解决命名冲突
名称空间分为三种:

  • 内置名称空间
  • 全局名称空间
  • 局部名称空间

内置名称空间

  • 内置名称空间:用于存放Python解释器中内置的名字
  • 生命周期:Python解释器启动则产生,Python解释器关闭则销毁
  • 例如:print、input、int ...

全局名称空间

  • 全局名称空间:运行顶级代码所产生的名字,或者说除函数内定义以及内置的外,剩下的都是全局名称空间
  • 生命周期:Python文件执行时产生,Python文件执行完毕后销毁
  • 例如:
# 变量名a
a = 1

# 函数名func
def func():
  pass

# 类名MyClass
class MyClass:
  pass

局部名称空间

局部命名空间:在调用函数时,运行函数体代码过程中产生的函数内的名字
生命周期:函数调用时产生,函数调用完毕后销毁
例如:

def func(x, y):
  pass

func(1, 2)

名称空间的先后顺序

  • 名称空间加载顺序:内置名称空间 -> 全局名称空间 -> 局部名称空间
  • 名称空间销毁顺序:局部名称空间 -> 全局名称空间 -> 内置名称空间
  • 名字的查找优先级:从当前所在位置向上一层一层查找

作用域

全局作用域

全局作用域:内置名称空间、全局名称空间

特点:

  • 全局存活
  • 全局有效:被所有函数共享

局部作用域

局部作用域:局部名称空间

特点:

  • 临时存活
  • 局部有效:函数内有效

LEGB原则

找寻变量的调用顺序采用LEGB原则(即就近原则)
B —— Builtin(Python);Python内置模块的命名空间 (内建作用域)
G —— Global(module); 函数外部所在的命名空间 (全局作用域)
E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
L —— Local(function);当前函数内的作用域 (局部作用域)
依据就近原则,从下往上 从里向外 依次寻找

global与nonlocal

  • global:声明全局变量获修改全局变量
  • nonlocal:修改局部变量(当前函数上一层的局部变量)
# global的使用
x = 1
def func():
  global x
  x = 2
func()
print(x)

# nonlocal的使用
def func1():
  x = 1
  def func2():
    nonlocal x
    x = 2
  func2()
  print(x)
func1()

总结

  • 名称空间是对栈的一种划分,真正存在的是栈区。名称空间只是一种虚拟的划分
  • 名称空间只有优先级之分,并无没有嵌套关系
  • 名称空间的“嵌套关系”决定了名字的查找顺序
  • 名称空间的“嵌套关系”以函数定义阶段为准

以上就是浅析Python的命名空间与作用域的详细内容,更多关于python 命名空间与作用域的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Python的Django框架中包装视图函数
Jul 20 Python
python异常和文件处理机制详解
Jul 19 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
python的unittest测试类代码实例
Dec 07 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
下载官网python并安装的步骤详解
Oct 12 Python
图解python全局变量与局部变量相关知识
Nov 02 Python
Python hashlib常见摘要算法详解
Jan 13 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
重构Python代码的六个实例
Nov 25 #Python
python try...finally...的实现方法
Nov 25 #Python
通过Python pyecharts输出保存图片代码实例
Nov 25 #Python
如何基于Python和Flask编写Prometheus监控
Nov 25 #Python
python3爬虫中多线程进行解锁操作实例
Nov 25 #Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 #Python
python 基于wx实现音乐播放
Nov 24 #Python
You might like
SONY ICF-SW55的电路分析
2021/03/02 无线电
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
浅析Ajax语法
2016/12/05 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
详解Python中的文本处理
2015/04/11 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
零基础学python应该从哪里入手
2020/08/11 Python
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
毕业生文员求职信
2013/11/03 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
中秋寄语大全
2014/04/11 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
家属慰问信
2015/02/14 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
六年级数学教学反思
2016/02/16 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android