浅析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模拟鼠标拖动操作的方法
Mar 11 Python
Python实现建立SSH连接的方法
Jun 03 Python
python select.select模块通信全过程解析
Sep 20 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
Python import与from import使用及区别介绍
Sep 06 Python
python爬取内容存入Excel实例
Feb 20 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
python多线程实现TCP服务端
Sep 03 Python
Python读取实时数据流示例
Dec 02 Python
Django返回HTML文件的实现方法
Sep 17 Python
python实现计算图形面积
Feb 22 Python
一起来学习Python的元组和列表
Mar 13 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
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
javascript 触发事件列表 比较不错
2009/09/03 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
学习python的前途 python挣钱
2019/02/27 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
python如何判断IP地址合法性
2020/04/05 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
高中化学教学反思
2014/01/13 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
优秀大学生申请书
2019/06/24 职场文书
MySQL 计算连续登录天数
2022/05/11 MySQL
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS