本篇文章给大家带来的内容是关于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中命名空间的三种方式介绍(附示例)相关推荐

  1. python格式化字符串_Python笔记7:三种方式构建字符串-格式化

    主要内容: 小目标:掌握字符串 主要内容:字符串格式化,占位符 字符串非常重要,只要做编程,你不可能离开字符串 如果看完这篇文章,你还是弄不明白格式化: 你来找我,我保证不打你,我给你发100的大红包 ...

  2. C++使用命名空间中成员的三种方式

    通过简单的代码来介绍使用命名空间中成员的三种方式(我们最常用到的命名空间是是标准库std,下面的命名空间都以std为例): 使用作用域符:: 1 #include<iostream> 2 ...

  3. 【opencv学习笔记】第五篇:访问图像中像素的三种方式、ROI区域图像叠加和图像混合

    1. 访问图像中像素的三种方式 任何图像处理算法,都是从操作每个像素开始的.在OpenCV中,提供了三种访问每个像素的方法. 方法1:指针访问:C操作符[] 方法2:迭代器iterator 方法3:动 ...

  4. 基于unet神经网络上采样中的的三种方式的理解

    关于前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容中的一个知识点-上采样. 一.基于unet神经网络上采样中的的三种方式的理解 ...

  5. STM32芯片烧录的三种方式介绍,串口、STM32 ST-LINK Utility以及STM32CubeProgrammer

    STM32芯片烧录的三种方式介绍,串口.STM32 ST-LINK Utility以及STM32CubeProgrammer 1 概述 1.1资源概述 1.2 STM32串口烧录方式 2.KEIL软件 ...

  6. python中变量名后的逗号_Python中逗号的三种作用实例分析

    本文实例讲述了Python中逗号的三种作用.分享给大家供大家参考.具体分析如下: 最近研究python  遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说 ...

  7. python逗号怎么用_Python中逗号的三种作用实例分析

    本文实例讲述了Python中逗号的三种作用.分享给大家供大家参考.具体分析如下: 最近研究python 遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说 ...

  8. python语言format蔬菜姓名、年龄_python格式化输出的三种方式

    [TOC] 格式化输出的三种方式 一.占位符(第一种格式化输出 )(3.0版本使用) 程序中经常会出现这样的 场景:要求用户输入信息,然后打印成固定的格式 比如要求用户输入用户名和年龄,然后打印如下格 ...

  9. python实现定时任务的方式_Python实现定时执行任务的三种方式简单示例

    本文实例讲述了Python实现定时执行任务的三种方式.分享给大家供大家参考,具体如下: 1.定时任务代码 #!/user/bin/env python # @Time :2018/6/7 16:31 ...

最新文章

  1. Python 之 matplotlib (十四)图中图
  2. opencv中的push_back()函数
  3. Linux应用程序设计之网络基础编程
  4. android:shareduserid获取资源,关于 android:sharedUserId=android.uid.system
  5. 会计记忆总结之七:财产清查
  6. 计算从ios照片库中选取的图片文件大小
  7. matlabrvctools主要功能及实际应用_【从业必备 | 收藏】ISO26262功能安全标准白皮书:关键组成、软硬件认证、测试过程、合规认证工具...
  8. Java 关键字—— static 与 final
  9. MySQL 事务(Transaction)篇
  10. 网络专业人士笔记(超级珍藏)
  11. Python学习笔记:动态添加与删除属性与方法
  12. 3-AIV--使用ContentProvider获得所有图片路径
  13. 有趣的视频 国外计算机课程
  14. Fabric.js中文文档
  15. 用友NC V5.7 5.6 5.5 2019新个人所得税增强包
  16. 需要查询前一次该厂商,料号的单价, 这个sql语句很难写,你碰到过没有
  17. MPB:南京​湖泊所王建军组-​湖泊沉积物的野外采集方法
  18. Linux - 系统安装
  19. python+selenium环境配置及浏览器调用
  20. 解决iphone在微信内置浏览器中看不到video标签

热门文章

  1. 性能测试工具curl-loader二---测试分析
  2. kubernetes1.8.4安装指南 -- 3. 安装docker ce
  3. #pragma warning(pop) 和 #pragma warning(push)的作用
  4. 你当真了解count(*)count(id)count(1)吗?
  5. leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)
  6. 数据结构与算法(二):堆,大根堆,小根堆,堆排序,比较器详解
  7. 【Eviews】第九周实验-二次/对数拟合、预测
  8. 【Servlet】Filter过滤器详解、使用示例
  9. 【MySQL查询】复杂查询:别名、外键join
  10. 如何在Spring boot中修改默认端口