名称空间(name space)
名称空间(name space)
函数编程中,有一个挥之不去的问题:变量名的定义。
我们知道,在相同的作用域内不能出现两个相同的变量名,否则前者被后者覆盖
我们还知道,局部变量的名字可以与全局变量的名字相同。
只不过,局部变量的作用域只是在局部函数内,出了函数外,局部变量的值无效
a = 10
def inner():
a = 100
print(a)
inner()
print(a)
100
10
现在有个问题:
我们知道 变量a=10,10这个数字是存在内存中的一块内存地址中,那名字a存在什么地方?
为什么不同作用域的a可以取不同的值,为什么计算机不会弄它们的对应关系?
这就是名称空间的作用了
刚才问到a这个名字存在什么地方,其实是存在名称空间中
python里面有很多名字空间,每个地方都有自己的名字空间,互不干扰,不同空间中的两个相同名字的变量之间没有任何联系。
名称空间有4种:LEGB
locals:
- 函数内部的名字空间,一般包括函数的局部变量以及形式参数
enclosing function:
- 在嵌套函数中外部函数的名字空间, 若fun2嵌套在fun1里,对
fun2来说,fun1的名字空间就enclosing.
globals:
- 当前的模块空间,模块就是一些
py文件。也就是说,globals()类似全局变量。
builtins:
- 内置模块空间,也就是内置变量或者内置函数的名字空间,print(dir(builtins))可查看包含的值。
不同变量的作用域不同就是由这个变量所在的名称空间决定的。
作用域即范围
- 全局范围:全局存活,全局有效
- 局部范围:临时存活,局部有效
查看作用域方法 globals(),locals()
作用域查找顺序
当程序引用某个变量的名字时,就会从当前名字空间开始搜索。搜索顺序规则便是:LEGB。即locals -> enclosing function -> globals ->builtins。一层一层的查找,找到了之后,便停止搜索,如果最后没有找到,则抛出在NameError的异常。
名称空间(name space)的更多相关文章
- PythonStudy——名称空间 Name space
# 名称空间:就是名字与地址的对应关系,可以被Python解释器遍历查找,采用堆栈存储方式 # 三种名称空间# Built-in:内置名称空间:系统级,一个:随解释器执行而产生,解释器停止而销毁# G ...
- python函数名称空间
一.命名空间概念 命名空间(name space),若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方.命名空间分三种: locals:函数内的名称空间,包括局部变量和形参 gl ...
- Python—函数的名称空间
名称空间 又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方 名称空间共3种, ...
- Python全栈之路----函数进阶----名称空间
又名name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的=地方 名称空间共3种,分别如下 ...
- Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器
一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...
- Python名称空间和闭包
一.名称空间 1.定义:又名 name space,顾名思义,就是存放名字的地方.比如:若变量x = 1,1存放在内存中, 而名称空间正是存放名字x与1绑定关系的地方. 2.分类: locals : ...
- python函数名称空间与作用域、闭包
一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...
- C++知识回顾(二)——名称空间
随着工程的增大,名称相互冲突的肯能性增加,使用多个厂商的类库时,可能导致名称冲突.为了解决这些问题,需要用到名称空间. 为了将代码加入名称空间,可以使用namespae将其包含,例如,编写一段代码,其 ...
- 带名称空间的xml数据查询
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="MapSource 6.5" versio ...
随机推荐
- Codility---BinaryGap
Task description A binary gap within a positive integer N is any maximal sequence of consecutive zer ...
- js&jq遇到的问题(不断更新中)
1.普通事件和事件绑定: 代码: 普通事件: var btn=document.getElementById('btn'); btn.onclick=function(){ alert("c ...
- spring boot单元测试之RestTemplate(一)
写代码重要,写好的代码准确无误,且符合预期那更是必不可少. spring boot内嵌了专门的单元测试模块——RestTemplate,保证了程序员可以对自己的代码进行及时的测试. 闲言少叙,直接上代 ...
- 3012C语言_数据
第二章 数据 2.1 数据类型 2.1.1 数据类型决定 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作 2.2基本数据类型 2.2.1分类 基本类型 类型 符号 关键字 字节 1 ...
- 08 JS的事件流的概念(重点)
在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...
- 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式)
不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式) 问题描述: 朋友说离线腾讯视频是 qlv 格式的,只能使用腾讯视频软件打开.让我帮忙想想办法,能不能将 qlv 格式转换成 m ...
- Windows使用Cmder
Windows使用Cmder cmder是一个增强型命令行工具, 不仅可以使用Windows下的所有命令, 更爽的是可以使用linux的命令, shell命令. 下载 官网地址: cmder官网 下载 ...
- Gradle +HanLP +SpringBoot 构建关键词提取,摘要提取 。入门篇
前段时间,领导要求出一个关键字提取的微服务,要求轻量级. 对于没写过微服务的一个小白来讲.有点赶鸭子上架,但是没办法,硬着头皮上也不能说不会啊. 首先了解下公司目前的架构体系,发现并不是分布式开发,只 ...
- Windows使用Python统一设置解析器路径
碰到的问题: .py文件放在cgi-bin文件夹下面,这个.py文件都要设置"#!python.exe路径"来告诉CGI如何找解析器解析这个.py的文件,我是想知道这个路径可否统一 ...
- SQL参数化查询
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...