python项目命名空间管理(Python语言中命名空间的使用?)

1.Python语言中命名空间的使用?

如果一个命名声明为全局的,那么对它的所有引用和赋值会直接搜索包含这个模块全局命名的作用域。

如果要重新绑定最里层作用域之外的变量,可以使用 nonlocal 语句;如果不声明为 nonlocal,这些变量将是只读的(对这样的变量赋值会在最里面的作用域创建一个新的局部变量,外部具有相同命名的那个变量不会改变)。通常,局部作用域引用当前函数的命名。

在函数之外,局部作用域与全局使用域引用同一命名空间:模块命名空间。类定义也是局部作用域中的另一个命名空间。

重要的是作用域决定于源程序的意义:一个定义于某模块中的函数的全局作用域是该模块的命名空间,而不是该函数的别名被定义或调用的位置,了解这一点非常重要。另一方面,命名的实际搜索过程是动态的,在运行时确定的——然而,Python 语言也在不断发展,以后有可能会成为静态的“编译”时确定,所以不要依赖动态解析!(事实上,局部变量已经是静态确定了。)

Python 的一个特别之处在于:如果没有使用 global 语法,其赋值操作总是在最里层的作用域。赋值不会复制数据,只是将命名绑定到对象。

删除也是如此:del x 只是从局部作用域的命名空间中删除命名 x 。事实上,所有引入新命名的操作都作用于局部作用域。

特别是 import 语句和函数定义将模块名或函数绑定于局部作用域(可以使用 global 语句将变量引入到全局作用域)。global 语句用以指明某个特定的变量为全局作用域,并重新绑定它。

nonlocal 语句用以指明某个特定的变量为封闭作用域,并重新绑定它。

python项目依赖包管理,python学员管理项目实战教程,Python命名空间

2.到底什么是程序集?和命名空间到底是什么关系?一段代码?一个文件

命名空间:就像你硬盘里的文件夹, 不同的文件夹下存放不同的文件(类),这样就可以避免文件全部堆在一个地方引起混乱(同理, 这样你就可以为不同的模块建立命名空间,这样就可以使类和容易管理), 并且可以避免多个同名文件无法放在一个文件夹下。

程序集:。NET编写的DLL和EXE就是程序集。

程序集包括: 1、程序集清单,包含程序集元数据。 2、类型元数据。

3、实现这些类型的 Microsoft 中间语言 (MSIL) 代码。 4、资源集。

所以这两个概念其实是不同的东西,没有什么联系。只是一般建立类库项目(DLL)的时候会用默认的命名空间来命名程序集文件,这样很容易使人把这两个东西联系起来。

命名,项目,管理,空间

3.python怎么用命名空间写程序

大概一般人也不会在程序里去直接修改名字空间里的内容 举个栗子 >>> globals(){'__builtins__': , '__name__': '__main__', '__doc__': None, '__package__': None}>>> globals()['name'] = 'bigbang'>>> globals(){'__builtins__': , '__name__': '__main__', '__doc__': None, 'name': 'bigbang', '__package__': None}>>> globals()['name'] = 'taeyang'>>> globals(){'__builtins__': , '__name__': '__main__', '__doc__': None, 'name': 'taeyang', '__package__': None}>>> del globals()['name']>>> globals(){'__builtins__': , '__name__': '__main__', '__doc__': None, '__package__': None}实际上无论是哪种名字空间,存储的都是一个字典类型的数据,修改字典内容就可以啦。

4.python怎么用命名空间写程序

大概一般人也不会在程序里去直接修改名字空间里的内容

举个栗子

>>> globals()

{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}

>>> globals()['name'] = 'bigbang'

>>> globals()

{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'name': 'bigbang', '__package__': None}

>>> globals()['name'] = 'taeyang'

>>> globals()

{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'name': 'taeyang', '__package__': None}

>>> del globals()['name']

>>> globals()

{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}实际上无论是哪种名字空间,存储的都是一个字典类型的数据,修改字典内容就可以啦。

5.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项目中。然而一旦一个命名空间包被创建,它和一个常规包之间并没有功能上的区别,它能够支持我们所学过的常规包的一切功能,包括包相对导入语法。

6.python命名空间问题

Traceback (most recent call last):

File "", line 1, in

f()

File "", line 2, in f

a = a+1

UnboundLocalError: local variable 'a' referenced before assignment

首先,在f()这个函数里,a是个局部变量。原因:没加global a这一句。

然后,函数内容一上来就调用了a本身的值。对于python来说,它这时还不知道a是什么呢。

所以,这个错误的意思是说,a作为一个局部变量,没有先声明数值就被引用了,无从查找其值。

python项目命名空间管理

转载请注明出处编程代码网 » python项目命名空间管理(Python语言中命名空间的使用?)

资讯

python两个数组去重(如何使用python将二维数组去重呢)

阅读(31)

本文主要为您介绍python两个数组去重,内容包括如何使用python将二维数组去重呢,如何使用python将二维数组去重呢,python函数如何返回多个变量。方案1:转化为虚数x=c[:,0]+c[:,1]*1jprint(转化为虚数:,x)print(虚数去重后:,np.unique(x))

资讯

python入门测试教程(初学Python,想以后做自动化测试,如何学习?)

阅读(31)

本文主要为您介绍python入门测试教程,内容包括Python做软件自动化测试的入门提问,初学Python,想以后做自动化测试,如何学习?,零基础如何开始学习Python?如何入门?。1)学好python的第一步,就是马上到官网上下载一个python版本。2)下载完毕后,就

资讯

python文本框粘贴(python怎么复制粘贴?)

阅读(34)

本文主要为您介绍python文本框粘贴,内容包括python怎么复制粘贴?,怎么在输入框里复制粘贴发言?,复制文本拷过来呢?。复制粘贴的方法:在IDE里面鼠标选中之后ctrl+c,ctrl+v。1. Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpa

资讯

python图像定位(怎样利用Python进行图片分析)

阅读(35)

本文主要为您介绍python图像定位,内容包括怎样利用Python进行图片分析,如何采用Python读取一个图像,python图片打开方式。from PIL import Image ### 此处为导出包,注意字母大小写import os, os.path# 指明被遍历的文件

资讯

python提取压缩文件(python怎样压缩和解压缩ZIP文件)

阅读(31)

本文主要为您介绍python提取压缩文件,内容包括python怎样压缩和解压缩ZIP文件,怎么样大比例的压缩文件?我看到人家的压缩包只有70兆,但是解压出,下好了客户端~~怎么装啊,好多压缩包!压到那里啊~~求谢!!爱问。python使用zipfile模块压缩和解

资讯

python多进程类方法(如何使用python的multiprocess多进程)

阅读(38)

本文主要为您介绍python多进程类方法,内容包括如何使用python的multiprocess多进程,如何使用python的multiprocess多进程,python下多进程时全局变量在子进程怎么能更新?遇到从子进程更?。#!/usr/bin/env python# encoding: utf-8from multi

资讯

python写csv格式文件(python怎么写入csv文件)

阅读(32)

本文主要为您介绍python写csv格式文件,内容包括python怎么写入csv文件,python怎么写入csv文件,csv文件怎么打开使用Python读取和写入CSV文件。import pandas as pd#任意的多组列表a = [1,2,3]b = [4,5,6] #字典中的key值即为csv中列名d

资讯

python中文信息处理(如何用Python中的NLTK对中文进行分析和处理)

阅读(42)

本文主要为您介绍python中文信息处理,内容包括如何用Python中的NLTK对中文进行分析和处理,python有中文的帮助文档吗,请问现在中国语言文学专业都课程。最近正在用nltk 对中文网络商品评论进行褒贬情感分类,计算评论的信息熵(entropy)、互信息

资讯

python字符串匹配列表(python中怎么建立一个字符串列表)

阅读(36)

本文主要为您介绍python字符串匹配列表,内容包括python中如何实现字符串最后几位的精确匹配?例如一个列表list=[,python中怎么建立一个字符串列表,python怎样把字符串列表。可以使用字符串的join方法,可以把列表的各个元素连接起来,字符串就

资讯

python提取空格(python里面怎么提取空格分开的字符串)

阅读(26)

本文主要为您介绍python提取空格,内容包括python里面怎么提取空格分开的字符串,如何用python把文件中每行字符前面的空格去掉,Python怎么样截取字符。借助于lstrip()提取左边空格>>> s = A B C >>> s.lstrip() # 去除字母字符串左边的空格A

资讯

python对话框闪(python从run对话框运行*.bat为什么一闪)

阅读(35)

本文主要为您介绍python对话框闪,内容包括python从run对话框运行*.bat为什么一闪,python在windows系统中.py存储文件打开后一闪而过?,CYberlinkyoucam启动后出现这个对话框,在设置中也找?。本文重点介绍如何在Abaqus中执行Python脚本。如果

资讯

python创建命名管道(python如何实现管道编程)

阅读(35)

本文主要为您介绍python创建命名管道,内容包括python如何实现管道编程,在建立于服务器的连接时出错.(provider:命名管道提供程序?爱问知,建立与服务器的连接时出错,在链接到(provider:命名管道提?爱问。管道调用子程序我们想在程序中使用一

资讯

python日志转储(怎么使用Logrotate来管理系统日志?)

阅读(34)

本文主要为您介绍python日志转储,内容包括python的日志怎么转储,怎么使用Logrotate来管理系统日志?,python日志文件转换某个字段格式,再保存。logrotate 配置 2、缺省配置 logrotate 3、使用include 选项读取其他配置文件 4、使用include

资讯

pythonnames(python标识符命名规则)

阅读(28)

本文主要为您介绍pythonnames,内容包括python标识符命名规则,python名字排序写一个程序,让用户提供5个名字程序要把这5爱问知,?Don&#39;。文件名全小写,可使用下划线包应该是简短的、小写的名字。如果下划线可以改善可读性可以加入。如mypac

资讯

python项目mac打包(python中MAC地址打包问题)

阅读(27)

本文主要为您介绍python项目mac打包,内容包括python中MAC地址打包问题,python中MAC地址打包问题,Mac上装Python3的最好方法是什么?。# -*- coding=utf8 -*-import socketimport structdef WOL(macaddress):i

资讯

python爬虫练手项目(Python的练手项目有哪些值得推荐)

阅读(28)

本文主要为您介绍python爬虫练手项目,内容包括Python的练手项目值得推荐,零基础如何开始学习Python?如何入门?,Python什么爬虫库好用?。你好,学习Python编程语言,是大家走入编程世界的最理想选择。关于Python的教程及书籍推荐,你可以到我们官

资讯

python6g内存(python最大能用多大存储空间)

阅读(25)

本文主要为您介绍python6g内存,内容包括python最大能用多大存储空间,内存卡还有6G的空间,手机老显示内存不足,能移的我都移了,手机,电脑内存问题!电脑内存6g,用win7只能有4g多可以用,还有剩爱问。这个是操作系统的限制,跟python没有直接关系

资讯

github上python项目(python语言是人们最喜欢用的语言吗?)

阅读(40)

本文主要为您介绍github上python项目,内容包括如何使用github的Python项目?,python语言是人们最喜欢用的语言吗?,github怎么建立项目组。今年在Github上Python项目稳坐前三,从这个数据看还是有不少人用的。最主要用Python的体验上很好,即拿即