浅析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爬虫之抓取百度贴吧代码分享
Nov 06 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
python使用代理ip访问网站的实例
May 07 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
Python实现最大子序和的方法示例
Jul 05 Python
利用python计算时间差(返回天数)
Sep 07 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
Python实现简单的2048小游戏
Mar 01 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
一些常用的php简单命令代码集锦
2007/09/24 PHP
由php if 想到的些问题
2008/03/22 PHP
PHP 身份证号验证函数
2009/05/07 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
一套.net面试题及答案
2016/11/02 面试题
德尔福集团DELPHI的笔试题
2012/02/22 面试题
小学教师的个人自我鉴定
2013/10/24 职场文书
营业员演讲稿
2013/12/30 职场文书
活动邀请函范文
2014/01/19 职场文书
妇女干部培训方案
2014/05/12 职场文书
闪闪红星观后感
2015/06/08 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL