python 命名空间(python 定义变化的变量名称)

2024-06-25 13:50:18 64

python 命名空间(python 定义变化的变量名称)

本文目录

python 定义变化的变量名称


利用命名空间动态赋值。在 Python 的命名空间中,将变量名与值存储在字典中,可以通过 locals(),globals() 函数分别获取局部命名空间和全局命名空间。
实例:
names = locals()
for i in range(5):
names[’n’ + str(i) ] = i
print(n0, n1, n2, n3, n4)
输出结果:
0 1 2 3 4

python命名空间包导入算法


要理解命名空间包,需从底层去学习包导入操作在Python 3.3中是如何完成的。在导入过程中,3.3版本与3.2和之前的版本一样,依旧会遍历模块搜索路径sys.path中的每个目录。然而,在3.3版本中,当对每个模块搜索路径中的directory搜索名为spam的被导人包时,Python会按照下面的顺序测试一系列更广的匹配条件:
1.如果找到directory\spaml_init__.py,便会导入一个常规包并返回。
2.如果找到directoryspam.ipy,pyc,或其他模块扩展名},便会导人一个简单模块并
返回。
3.如果找到文件夹directorylspam,便会将其记录下来,而扫描将从搜索路径中的下一
个目录继续。
4.如果上述的所有都没有找到,扫描将从搜索路径中的下一个目录继续。
如果搜索路径扫描结束后没有从上述步骤1和步骤2中返回一个模块或包,而同时在上述步骤3中至少记录了一个路径,那么就会创建一个命名空间包。
命名空间包的创建会立即发生,而且不会推迟到一个子层级的导入发生之时。新的命名空间包有一个_path_属性,该属性被设置为在上述步骤3中扫描并记录的目录路径字符串的可迭代对象,但是没有_file_属性。
path_属性在随后更深的访问过程中用于搜索所有包组件。命名空间包的_path_中每个被记录的项目,都会在进一步嵌套的项目被请求时进行搜索,这很像一个常规包的单独路径。
从另一方面看,命名空间包的_path_属性对于更低层次组件的关系,和sys.path对于顶层最左侧的包导入路径的关系是一样的。命名空间包成为了访问更低层次项目的“父路径”,这一访问也使用了上面介绍的四个步骤。
最终的结果是一个命名空间包是一种对多个目录的虚拟拼接,这些目录可以位于多个sys.path项目中。然而一旦一个命名空间包被创建,它和一个常规包之间并没有功能上的区别,它能够支持我们所学过的常规包的一切功能,包括包相对导入语法。

python的标识符命名规则是什么有哪些关键字


  • 包名:全部小写字母,中间可以由点分隔开,不推荐使用下划线。作为命名空间,包名应该具有唯一性,推荐采用公司或者组织域名的倒置,如com.apple.quicktime.v2。

  • 模块名:全部小写字母,如果是多个单词构成,可以用下划线隔开,如dummy_threading。

    3、类名:总是使用首字母大写单词串。如MyClass。内部类可以使用额外的前导下划线。

    类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写。类名应该简明,精确,并足以从中理解类所完成的工作。常见的一个方法是使用表示其类型或者特性的后缀,例如:

    SQLEngine、MimeTypes。

    4、异常名:异常属于类,命名同类命名,但应该使用Error作为后缀。如FileNotFoundError

    5、变量名:变量名:全部小写,由下划线连接各个单词。如color = WHITE,this_is_a_variable = 1

    *注意*:

    1.不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。

    2.私有类成员使用单一下划线前缀标识,如_height。多定义公开成员,少定义私有成员。

    3.变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。

  • 函数名和方法名:

    函数名应该为小写,可以用下划线风格单词以增加可读性。如:myfunction,my_example_function。

    *注意*:

    混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。

    总使用“self”作为实例方法的第一个参数。总使用“cls”作为类方法的第一个参数。

    如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。

    7、常量名:全部大写字母,如果是多个单词构成,可以用下划线隔开,如YEAR和WEEK_OF_MOUTH。

    了解Python命名规则可以帮助我们更好的处理代码,提高工作效率。


Python 中作用域与命名空间的问题


i=2 这一句 是定义了一个局部变量i, 并赋值为2;  这个时候全局作用域的i会被屏蔽, 所以全局变量i是没有被修改的 所以结果是1;

访问全局变量时可以直接访问, 但是修改全局作用域的时候一定要在赋值之前,进行如下声明:

def f():

    global i

    i = 2

因为python里赋值语句和声明变量是一个体的, 所以需要global来告诉解释器i是全局变量, 接下来的i=2才能被当作是赋值

------------------追答---------------------

同一个代码块(作用域)里, 同一个变量的作用域只能是同一种或者说同一个变量只能来自同一个作用域, 不能是一会是局部变量然后又变成全局变量;

i = i + 1

首先前面的’i=’表明了i是一个局部变量(没有global声明, 创建局部变量), 然后后面的’i+1’里的i自然也是局部变量(同一个函数下同一个变量,i已经是局部变量了, 不能再当作全局变量去用), 那么自然会报错, i在使用前未声明

i += 1

报错就更明显了, 没有global声明 那么再修改变量i的时候, 自然是当作局部变量, 使用前未声明

变量的查找顺序遵循 LEGB 可以自己百度 

关于作用域给你再写个简单的示例, 你对照着理解一下


程序开发语言中有没有空间这个说法呢


程序开发语言中有空间这个说法,比如php就有命名空间,java中就有包的说法。
命名空间 是从命名到对象的映射。当前命名空间主要是通过 Python 字典实现的,不过通常不关心具体的实现方式(除非出于性能考虑),以后也有可能会改变其实现方式。以下有一些命名空间的例子:内置命名(像 abs() 这样的函数,以及内置异常名)集,模块中的全局命名,函数调用中的局部命名。某种意义上讲对象的属性集也是一个命名空间。关于命名空间需要了解的一件很重要的事就是不同命名空间中的命名没有任何联系,例如两个不同的模块可能都会定义一个名为 maximize 的函数而不会发生混淆-用户必须以模块名为前缀来引用它们。
顺便提一句,我称 Python 中任何一个“.”之后的命名为 属性 --例如,表达式 z.real 中的 real 是对象 z 的一个属性。严格来讲,从模块中引用命名是引用属性:表达式 modname.funcname 中,modname 是一个模块对象,funcname 是它的一个属性。因此,模块的属性和模块中的全局命名有直接的映射关系:它们共享同一命名空间!
属性可以是只读过或写的。后一种情况下,可以对属性赋值。你可以这样做: modname.the_answer = 42 。可写的属性也可以用 del 语句删除。例如: del modname.the_answer 会从 modname 对象中删除 the_answer 属性。
不同的命名空间在不同的时刻创建,有不同的生存期。包含内置命名的命名空间在 Python 解释器启动时创建,会一直保留,不被删除。模块的全局命名空间在模块定义被读入时创建,通常,模块命名空间也会一直保存到解释器退出。由解释器在最高层调用执行的语句,不管它是从脚本文件中读入还是来自交互式输入,都是 __main__ 模块的一部分,所以它们也拥有自己的命名空间(内置命名也同样被包含在一个模块中,它被称作 builtins )。
当调用函数时,就会为它创建一个局部命名空间,并且在函数返回或抛出一个并没有在函数内部处理的异常时被删除。(实际上,用遗忘来形容到底发生了什么更为贴切。)当然,每个递归调用都有自己的局部命名空间。
作用域 就是一个 Python 程序可以直接访问命名空间的正文区域。这里的直接访问意思是一个对名称的错误引用会尝试在命名空间内查找。尽管作用域是静态定义,在使用时他们都是动态的。每次执行时,至少有三个命名空间可以直接访问的作用域嵌套在一起:

Python命名空间和全局变量问题,怎么解决


当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
1、局部命名空间:特指当前函数或类的方法。如果函数定义了一个局部变量 x,或一个参数 x,Python 将使用它,然后停止搜索。
2、全局命名空间:特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
3、内置命名空间:对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
4、如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,如,NameError: name ’aa’ is not defined。

嵌套函数的情况:
1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索
2、然后是在父函数的命名空间中搜索
3、接着是模块命名空间中搜索
4、最后在内置命名空间中搜索

python命名空间是什么


在Python中,所有的名字都存在一个空间中,它们在该空间中存在和被操作——这就是命名空间。它就像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面找到相应的对象。

【定义】

名称到对象的映射。命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。

相关推荐:《Python教程》

【分类】

python程序执行期间会有2个或3个活动的命名空间(函数调用时有3个,函数调用结束后2个)。按照变量定义的位置,可以划分为以下3类:

Local,局部命名空间,每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。

Global,全局命名空间,每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。

Built-in,python自带的内建命名空间,任何模块均可以访问,放着内置的函数和异常。

【生命周期】

Local(局部命名空间)在函数被调用时才被创建,但函数返回结果或抛出异常时被删除。(每一个递归函数都拥有自己的命名空间)。

Global(全局命名空间)在模块被加载时创建,通常一直保留直到python解释器退出。

Built-in(内建命名空间)在python解释器启动时创建,一直保留直到解释器退出。

各命名空间创建顺序:python解释器启动 -》创建内建命名空间 -》 加载模块 -》 创建全局命名空间 -》函数被调用 -》创建局部命名空间

各命名空间销毁顺序:函数调用结束 -》 销毁函数对应的局部命名空间 -》 python虚拟机(解释器)退出 -》销毁全局命名空间 -》销毁内建命名空间

python解释器加载阶段会创建出内建命名空间、模块的全局命名空间,局部命名空间是在运行阶段函数被调用时动态创建出来的,函数调用结束动态的销毁的。


python 命名空间(python 定义变化的变量名称)

本文编辑:admin

更多文章:


enterprise的名词(一组英语单词的区别)

enterprise的名词(一组英语单词的区别)

“enterprise的名词”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看enterprise的名词(一组英语单词的区别)!本文目录一组英语单词的区别企业的名词解释什么是Enterpriseconcern和enterpri

2024年6月28日 19:13

有哪些比较准确的手机地图导航软件?国内自驾游使用哪种导航最靠谱

有哪些比较准确的手机地图导航软件?国内自驾游使用哪种导航最靠谱

本文目录有哪些比较准确的手机地图导航软件国内自驾游使用哪种导航最靠谱怎样下载车载导航有哪些专业地图网站什么导航最好用,最准确现在最好用的导航是什么为什么百度地图导航金莎的语音那么好听,高德的那么难听百度地图怎么设置姜sir语音包百度地图语音

2024年7月1日 07:52

免费服务器试用(云服务器免费的可以用)

免费服务器试用(云服务器免费的可以用)

本文目录云服务器免费的可以用有没有免费试用的主机哪有服务器免费试用云服务器免费的可以用不可能有真真免费的云主机的,云服务器是一种高精尖的产品,投资巨大,一个机房投资下来要几千万,没有服务商承受得起,因此没有免费的云主机呀。云主机是云计算在基

2024年6月27日 22:51

绿松石为什么那么贵(怎么盘绿松石才正确 绿松石为什么那么贵)

绿松石为什么那么贵(怎么盘绿松石才正确 绿松石为什么那么贵)

“绿松石为什么那么贵”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看绿松石为什么那么贵(怎么盘绿松石才正确 绿松石为什么那么贵)!本文目录怎么盘绿松石才正确 绿松石为什么那么贵为什么绿松石的价格千差万别绿松石为什么那么受追捧

2024年7月25日 11:46

importance的形容词(important有没有什么变化形式,比如ing形式或过去式等等,能把你知道的都写出来吗)

importance的形容词(important有没有什么变化形式,比如ing形式或过去式等等,能把你知道的都写出来吗)

本文目录important有没有什么变化形式,比如ing形式或过去式等等,能把你知道的都写出来吗the important of 和the importance of 的区别of importancemuchimportant有没有什么变化

2024年7月15日 11:27

滑块轴承调节器(滑动轴承中的有一种是自动调心轴承,一般用在什么地方,举一些具体的例子)

滑块轴承调节器(滑动轴承中的有一种是自动调心轴承,一般用在什么地方,举一些具体的例子)

这篇文章给大家聊聊关于滑块轴承调节器,以及滑动轴承中的有一种是自动调心轴承,一般用在什么地方,举一些具体的例子对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录滑动轴承中的有一种是自动调心轴承,一般用在什么地方,举一些具体的例子

2024年7月22日 04:20

数据分析师八大能力培养(什么类指标是电子商务数据监控的核心之一)

数据分析师八大能力培养(什么类指标是电子商务数据监控的核心之一)

本文目录什么类指标是电子商务数据监控的核心之一优秀店长的八大能力面试必胜的九大素质及八大能力数据分析能力模型面试官最看中求职者的八大能力简短航天科学小知识什么类指标是电子商务数据监控的核心之一什么类指标是电子商务数据监控的核心之一什么类指

2024年6月26日 10:17

c语言12345输出54321(输入一个整数,将其逆序输出,去(输入12345输出54321)这道题怎么做啊求解)

c语言12345输出54321(输入一个整数,将其逆序输出,去(输入12345输出54321)这道题怎么做啊求解)

大家好,c语言12345输出54321相信很多的网友都不是很明白,包括输入一个整数,将其逆序输出,去(输入12345输出54321)这道题怎么做啊求解也是一样,不过没有关系,接下来就来为大家分享关于c语言12345输出54321和输入一个整

2024年7月24日 01:21

strcmp函数会忽略大小写吗(if(strcmp(ch,“Y“)==0||strcmp(ch,“y“)==0))

strcmp函数会忽略大小写吗(if(strcmp(ch,“Y“)==0||strcmp(ch,“y“)==0))

本文目录if(strcmp(ch,“Y“)==0||strcmp(ch,“y“)==0)用C语言实现:strcmp(str1,str2)函数,比较两个字符串的大小(不区分大小写)php strcmp函数 是否对大小写敏感求 C语言不区分字符

2024年6月2日 02:20

snap翻译成中文(中国古代文言文言简意赅,为什么要发展成现代白话罗啰嗦嗦)

snap翻译成中文(中国古代文言文言简意赅,为什么要发展成现代白话罗啰嗦嗦)

本文目录中国古代文言文言简意赅,为什么要发展成现代白话罗啰嗦嗦美国这个中文名字谁起的是美丽的国家的意思吗中国古代文言文言简意赅,为什么要发展成现代白话罗啰嗦嗦中国文言文是真正汉语,现代语言参杂了大量日文。日文的语法系统与汉语是不一样的,造成

2024年6月6日 02:23

zootopia(zootopia怎么读)

zootopia(zootopia怎么读)

本文目录zootopia怎么读zootopia怎么读zootopia的音标是[zu: tɔ pɪə] 。词汇分析释义:《疯狂动物城》,是一部迪士尼影业出品的动画片拓展资料1、Nick: Everyone comes to Zootopia,

2024年7月12日 03:24

uniqueidentifier类型 查询语句(sql向表插入数据时id列的数据类型是uniqueidentifier怎么写语句能让他自动生成)

uniqueidentifier类型 查询语句(sql向表插入数据时id列的数据类型是uniqueidentifier怎么写语句能让他自动生成)

本文目录sql向表插入数据时id列的数据类型是uniqueidentifier怎么写语句能让他自动生成uniqueidentifier数据类型的相关语句SQL修改uniqueidentifier类型的值怎么写sql向表插入数据时id列的数据

2024年7月23日 17:38

bcd码转十进制(BCD码和十进制码怎么转换)

bcd码转十进制(BCD码和十进制码怎么转换)

本文目录BCD码和十进制码怎么转换8421BCD码怎样转换成十进制5421BCD码与十进码是如何相互转换的8421bcd码转换十进制数时位数不够怎么办10进制数写入到BcD码中等于多少8421bcd码转换十进制是多少BCD码和十进制码怎么转

2023年8月17日 22:00

ifconfig命令的用法(linux查看域名命令)

ifconfig命令的用法(linux查看域名命令)

本文目录linux查看域名命令ifconfig配置ip在linux系统中ifconfig -a是的命令是干吗用的啊ifconfig在虚拟机机中是什么意思Linux中ifconfig命令作用有哪些ifconfig是什么意思linux查看域名命

2024年4月7日 12:25

正则表达式6位数字怎么写(java 三位字母加6位数字的正则表达式怎么写)

正则表达式6位数字怎么写(java 三位字母加6位数字的正则表达式怎么写)

本文目录java 三位字母加6位数字的正则表达式怎么写6位数邮编正则表达式求C#中6位均为数字的正则表达式java 三位字母加6位数字的正则表达式怎么写import java.util.regex.Matcher;import java.u

2024年7月23日 23:14

企业微信直播一直数据加载中(进入企业微信直播显示数据加载中)

企业微信直播一直数据加载中(进入企业微信直播显示数据加载中)

其实企业微信直播一直数据加载中的问题并不复杂,但是又很多的朋友都不太了解进入企业微信直播显示数据加载中,因此呢,今天小编就来为大家分享企业微信直播一直数据加载中的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录进入

2024年7月11日 11:41

dede模板文件(dede网站 站内搜索时提示“模板文件不存在,无法解析”是怎么回事那位大师给指点一下)

dede模板文件(dede网站 站内搜索时提示“模板文件不存在,无法解析”是怎么回事那位大师给指点一下)

本文目录dede网站 站内搜索时提示“模板文件不存在,无法解析”是怎么回事那位大师给指点一下dede所有模板都不见 在哪个文件夹dede模板文件中,直接用{dede:php}require_once ’xx.php’;{/dede:php}

2024年6月25日 07:39

日本韩国出线(日本和韩国怎样出局的)

日本韩国出线(日本和韩国怎样出局的)

本文目录日本和韩国怎样出局的日本韩国都输球了吗日本队与韩国队能出线吗韩国日本出线了吗日本出线韩国是不是就回家了世界杯出线的球队日本韩国真的能出线吗日本韩国这次都出线了吗今年世界杯,亚洲去了哪几个国家日本和韩国怎样出局的当地时间12月5日,2

2024年6月24日 05:53

concerta(Cash Cash的《Concerta》 歌词)

concerta(Cash Cash的《Concerta》 歌词)

本文目录Cash Cash的《Concerta》 歌词information三单强生Concerta是OTC吗Cash Cash的《Concerta》 歌词歌曲名:Concerta歌手:Cash Cash专辑:Take It To The

2024年7月10日 13:29

哈夫曼树的叶子结点怎么算(n个叶子结点的哈夫曼树有多少个结点)

哈夫曼树的叶子结点怎么算(n个叶子结点的哈夫曼树有多少个结点)

各位老铁们好,相信很多人对哈夫曼树的叶子结点怎么算都不是特别的了解,因此呢,今天就来为大家分享下关于哈夫曼树的叶子结点怎么算以及n个叶子结点的哈夫曼树有多少个结点的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录n

2024年8月7日 00:05

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索