python的命名空间_python中命名空间的三种方式介绍(附示例)
本篇文章给大家带来的内容是关于python中命名空间的三种方式介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
python中的命名空间分三种:
内置的命名空间,在启动解释器的时候自动加载进内存的各种名字所在的空间,比如print,input等不需要定义就可以使用的名字
全局命名空间,就是从上到下所有我们定义的变量名和函数名所在的空间,是在程序从上到下被执行的过程中加载进内存的。
局部命名空间,比如函数在执行时所开辟的空间,里面存放了函数内部定义的各种名字,随着函数执行结束 这个局部命名空间就消失了。
在局部命名空间可以使用全局和内置命名空间中的名字
在全局命名空间可以使用内置命名空间中的名字,但不能使用局部命名空间的。
在内置命名空间不能使用全局和局部的名字。
可以形象地理解成内置命名空间具有最高级别,不需要定义就可以使用,全局命名空间次之,最低级是局部命名空间。
当低级命名空间使用名字时首先会在自身的命名空间里查找,如果有就使用,没有的话就到上一级命名空间内查找,如果有就使用,没有就继续到更上一级空间内查找,直到顶层的内置命名空间,如果有就使用,没有则会报错。
举个例子如下:num = 1 #这是全局命名空间内定义的num = 1
def func1(): #这个函数会创建一个局部命名空间1
num = 2 #这是在局部命名空间1定义的num = 2
def func2(): #这个函数会创建一个局部命名空间2
num = 3 #这是在局部命名空间2 内 定义的num = 3
print(num) #这是在局部命名空间2内 使用num 变量
func2() # 调用函数func2时 会执行该命令创建局部命名空间2
func1() #调用函数func1时会创建局部命名空间1,
#这几个命名空间的级别顺序是:内置>全局>局部1>局部2
#当print(num)指令执行时它会在局部2内查找是否有num,发现有则直接引用,如果没有则会到上一级(局部1)中查找,局部1没有则继续到上一级(全局)查找
再看一个例子:#max()函数是内置的函数,如果我们在全局命名空间中定义了函数名为max的函数时,则该函数就失效了,也就是说在自身空间内找到了max()后就不去内置命名空间查找了
def max(a,b,c):
return 'max失效了?'
print(max(1,2,3))#
正常情况下应该输出3(max函数功能是返回最大值),但是因为我们把max这个名字占用了,所以当使用时程序就不去上一级空间(内置命名空间)去查找了
与命名空间有关的两个函数globals()和locals()
可以用globals()查看全局命名空间的所有定义的名字
可以用locals()查看当前命名空间的所有定义的名字,在全局则返回全局,在局部则返回局部
这两个函数的返回值可以看作是字典,格式都是{key1:value1,key2:value2,.....}
当函数1内嵌套函数2时,对于函数1内的不可变数据类型的变量,函数2内可以引用,但不可修改def func1():
a = 1
def func2():
a = a + 1
#此处会报一个严重错误,因为a同时出现在等号两边,Python会先执行等号右边的表达式,
#发现你在引用a,然后它会先在本空间查找a,结果找到了等号左边的a,其结果就是“在定义变量前引用变量”
pass
func2()
func1()#如果想要修改,可以使用nonlocal(python3中新增)
def func1():
a = 1
def func2():
nonlocal a
a = a + 1
func2()
print(a)
func1()
#我们可以看出,执行func2()后再输出a,a已经变成2了
2
nonlocal只能作用于局部变量,当使用后它会自动查找上一级局部命名空间是否有该变量,如果没有继续向上查找,直到最上一级“局部命名空间”
以上就是python中命名空间的三种方式介绍(附示例)的详细内容,更多请关注php中文网其它相关文章!
本文转载于:segmentfault思否,如有侵犯,请联系a@php.cn删除
python的命名空间_python中命名空间的三种方式介绍(附示例)相关推荐
- python格式化字符串_Python笔记7:三种方式构建字符串-格式化
主要内容: 小目标:掌握字符串 主要内容:字符串格式化,占位符 字符串非常重要,只要做编程,你不可能离开字符串 如果看完这篇文章,你还是弄不明白格式化: 你来找我,我保证不打你,我给你发100的大红包 ...
- C++使用命名空间中成员的三种方式
通过简单的代码来介绍使用命名空间中成员的三种方式(我们最常用到的命名空间是是标准库std,下面的命名空间都以std为例): 使用作用域符:: 1 #include<iostream> 2 ...
- 【opencv学习笔记】第五篇:访问图像中像素的三种方式、ROI区域图像叠加和图像混合
1. 访问图像中像素的三种方式 任何图像处理算法,都是从操作每个像素开始的.在OpenCV中,提供了三种访问每个像素的方法. 方法1:指针访问:C操作符[] 方法2:迭代器iterator 方法3:动 ...
- 基于unet神经网络上采样中的的三种方式的理解
关于前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容中的一个知识点-上采样. 一.基于unet神经网络上采样中的的三种方式的理解 ...
- STM32芯片烧录的三种方式介绍,串口、STM32 ST-LINK Utility以及STM32CubeProgrammer
STM32芯片烧录的三种方式介绍,串口.STM32 ST-LINK Utility以及STM32CubeProgrammer 1 概述 1.1资源概述 1.2 STM32串口烧录方式 2.KEIL软件 ...
- python中变量名后的逗号_Python中逗号的三种作用实例分析
本文实例讲述了Python中逗号的三种作用.分享给大家供大家参考.具体分析如下: 最近研究python 遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说 ...
- python逗号怎么用_Python中逗号的三种作用实例分析
本文实例讲述了Python中逗号的三种作用.分享给大家供大家参考.具体分析如下: 最近研究python 遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说 ...
- python语言format蔬菜姓名、年龄_python格式化输出的三种方式
[TOC] 格式化输出的三种方式 一.占位符(第一种格式化输出 )(3.0版本使用) 程序中经常会出现这样的 场景:要求用户输入信息,然后打印成固定的格式 比如要求用户输入用户名和年龄,然后打印如下格 ...
- python实现定时任务的方式_Python实现定时执行任务的三种方式简单示例
本文实例讲述了Python实现定时执行任务的三种方式.分享给大家供大家参考,具体如下: 1.定时任务代码 #!/user/bin/env python # @Time :2018/6/7 16:31 ...
最新文章
- Python 之 matplotlib (十四)图中图
- opencv中的push_back()函数
- Linux应用程序设计之网络基础编程
- android:shareduserid获取资源,关于 android:sharedUserId=android.uid.system
- 会计记忆总结之七:财产清查
- 计算从ios照片库中选取的图片文件大小
- matlabrvctools主要功能及实际应用_【从业必备 | 收藏】ISO26262功能安全标准白皮书:关键组成、软硬件认证、测试过程、合规认证工具...
- Java 关键字—— static 与 final
- MySQL 事务(Transaction)篇
- 网络专业人士笔记(超级珍藏)
- Python学习笔记:动态添加与删除属性与方法
- 3-AIV--使用ContentProvider获得所有图片路径
- 有趣的视频 国外计算机课程
- Fabric.js中文文档
- 用友NC V5.7 5.6 5.5 2019新个人所得税增强包
- 需要查询前一次该厂商,料号的单价, 这个sql语句很难写,你碰到过没有
- MPB:南京​湖泊所王建军组-​湖泊沉积物的野外采集方法
- Linux - 系统安装
- python+selenium环境配置及浏览器调用
- 解决iphone在微信内置浏览器中看不到video标签
热门文章
- 性能测试工具curl-loader二---测试分析
- kubernetes1.8.4安装指南 -- 3. 安装docker ce
- #pragma warning(pop) 和 #pragma warning(push)的作用
- 你当真了解count(*)count(id)count(1)吗?
- leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)
- 数据结构与算法(二):堆,大根堆,小根堆,堆排序,比较器详解
- 【Eviews】第九周实验-二次/对数拟合、预测
- 【Servlet】Filter过滤器详解、使用示例
- 【MySQL查询】复杂查询:别名、外键join
- 如何在Spring boot中修改默认端口