12.3 名称空间
名称空间是名称(标识符)到对象的映射。向名称空间添加名称的操作过程涉及绑定标识符到指定对象的操作(以及给该对象的引用计数加1)。改变一个名字的绑定叫做重新绑定,删除一个名字叫做解除绑定。
执行期间有两个或三个活动的名称空间。这三个名称空间分别是局部名称空间,全局名称空间和内建名称空间,但局部名称空间在执行期间是不断变化的,所以我们说"两个或三个"。从名称空间中访问这些名字依赖于它们的加载顺序,或是系统加载这些名称空间的顺序。
Python解释器首先加载内建名称空间。它由__buildtins__模块中的名字构成。随后加载执行模块的全局名称空间,它会在模块开始执行后变为活动名称空间。
__buildtins__模块包含内建名称空间中内建名字的集合。
如果在执行期间调用了一个函数,那么将创建出第三个名称空间,即局部名称空间。我们可以通过globals()和locals()内建函数判断出某一名字属于哪个名称空间。
12.3.1 名称空间与变量作用域比较
每个名称空间是一个自我包含的单元。但从作用域的观点来看,事情是不同的。所有局部名称空间的名称都在局部作用范围内。局部作用以外的所有名称都在全局作用范围内。
12.3.2 名称查找、确定作用域、覆盖
访问一个属性时,解释器必须在三个名称空间中的一个找到它。首先从局部名称空间开始,如果没有找到,解释器将继续查找全局名称空间。如果这也失败了,它将在内建名称空间里查找。
12.3.3 无限制的名称空间
Python的一个有用的特性在于你可以在任何需要放置数据的地方获得一个名称空间。你可以在任何时候给函数添加属性(使用熟悉的句点属性标识).
12.4 导入模块
我们推荐所有模块在Python模块的开头部分导入,而且最好按照这样的顺序:
Python标准库模块
Python第三方模块
应用程序自定义模块
如果在一个模块的顶层导入,那么它的作用域就是全局的;如果在函数中导入,那么它的作用域是局部的。
12.4.3 多行导入
from Tkinter import (Tk, Frame)
12.4.4 扩展的import语句(as)
有时候你导入的模块或是模块属性名称已经在你的程序中使用了,或者你不想使用导入的名字,使用自己想要的名字替换模块的原始名称。
from cgi import FieldStorage as form
12.5 模块导入的特性
12.5.1 载入时执行模块
加载模块会导致这个模块被“执行”。也就是被导入模块的顶层代码将直接被执行。这通常包括全局变量以及类和函数的声明。如果有检查__name__的操作,那么它也会被执行。
12.5.2 导入(import)和加载(load)
一个模块只被加载一次,无论它被导入多少次。加载只在第一次导入时发生。
12.5.4 被导入到导入者作用域的名字
只从模块导入名字的另一个副作用是那些名字会成为局部名称空间的一部分。这可能导致覆盖一个已经存在的具有相同名字的对象。而且对这些变量的改变只影响它的局部拷贝而不是所导入模块的原始名称空间。也就是说,绑定只是局部的而不是整个名称空间。
12.5.5 关于__future__
为了让Python程序员为新事物做好准备,Python实现了__future__指令。
from __future__ import new_feature
分享到:
相关推荐
### 第10章 模块知识点详解 #### 一、模块的基本使用 在Python中,模块是用来组织代码的一种方式,可以提高代码的可维护性和复用性。通过使用关键字`import`来引入某个模块,例如引入`math`模块: ```python ...
第12章 文件与文件系统.ppt 第13章 基于thinter的GUI编程.ppt 第14章 Python的高级技术.ppt 第15章 数据库的应用.ppt 第16章 网络编程的应用.ppt 第17章 CGI程序设计.ppt 第18章 Web网站编程.ppt 第19章 经典游戏...
2. **加载与卸载**:内核模块可以通过`insmod`命令加载,`rmmod`命令卸载,或者在系统启动时通过配置文件静态加载。加载模块时,系统会查找并解析模块所需的内核符号,将模块插入到内核中。卸载时,系统会释放模块...
本章主要讲解了模块的两类基本类型——类模块和标准模块。 1. **类模块**:类模块与窗体和报表关联,每个窗体或报表都有其对应的类模块,用于存储与之相关的事件过程。事件过程是响应特定事件(如用户点击按钮)而...
在《Visual C++典型模块与实战大全》一书中,第十二章主要涵盖了使用Microsoft Visual C++进行软件开发的关键技术和实践应用。Visual C++是微软公司推出的一款强大的集成开发环境,它集成了C、C++以及C++/CLI编程...
- 内置模块和第三方模块:Python标准库提供了许多内置模块,同时用户也可以安装和使用第三方模块,如通过pip安装。 了解并熟练运用这些模块相关知识,对于编写高效、可维护的Python代码至关重要。随着项目的复杂度...
第一部分 Nginx能帮我们做什么 第1章 研究Nginx前的准备工作 2 ...第12章 upstream机制的设计与实现 447 第13章 邮件代理模块 500 第14章 进程间的通信机制 525 第15章 变量 554 第16章 slab共享内存 590
第12章 驾校管理信息系统 12.1 系统设计 12.2 数据库设计 12.3 设计工程框架 12.4 功能模块设计 12.5 系统演示 12.6 安装程序制作 12.7 本章小结 第13章 系统移植与升级 13.1 后台数据库升级 13.2...
第12章 网络留言板(JSP+Servlet+JavaBean) 第13章 网络留言板续——Oracle数据库 第14章 AJAX技术JQuery框架的经典应用 第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+...
总的来说,本章内容旨在教授读者如何利用Visual C++开发可复用的数据处理模块,并通过有效的设计和编程技巧,实现这些模块在不同系统平台间的顺利移植。这需要开发者具备扎实的C++基础,对数据结构和算法有深入理解...
第9章模块与VBA程序设计Access2010数据库.pptx
第12章 图片管理工具模块 12.1 概述 286 12.2 关键技术 286 12.2.1 上下移动ListBox选中项 286 12.2.2 将文件复制到剪切板 287 12.2.3 格式转换 288 12.2.4 图片幻灯片 288 12.2.5 图片旋转 289 ...
第12章:中断与实时性 中断是嵌入式系统中实现响应外部事件的关键机制。本章详细阐述了中断的工作原理,包括中断请求、中断响应、中断处理过程以及中断返回。同时,讨论了中断优先级、中断嵌套以及中断服务程序的...
Nacos 核心原理解读+高性能微服务系统实战【视频】第12章 深入理解Nacos--项目实战之在线教育平台在线学习模块开发 资源列表: 12-1视频学习题库学习文章学习三大在线学习功能概述0725 ev.mp4 12-2在线学习模块...
第12章 会员密码找回模块 第13章 基于XML技术的留言本 第14章 上传与下载模块 第15章 图片资源管理模块 第16章 搜索引擎模块 第17章 网上问卷调查模块 第18章 RSS在线订阅与阅读模块 第19章...
第1章 论坛模块 1 1.1 概述 2 1.2 XML数据库设计 2 1.2.1 XML数据库概述 2 1.2.2 XML数据库逻辑结构设计 2 1.3 关键技术详解 3 1.3.1 定义操作XML数据库的参数 3 1.3.2 读取XML中的数据 4 1.3.3 向...
最后,第十二章“结构”讲解了如何定义和使用自定义数据结构——结构体,这允许将不同类型的变量组合成一个单一的实体,便于处理复杂的数据结构,如链表、树等。 总之,这个C语言课件全面覆盖了C语言的基础知识,...
第六章的Simulink模块库介绍主要讲解了Simulink中一些基础且常用的模块,这些模块是构建模型的基础。以下是对各个模块的详细说明: 1. **总线信号生成与总线信号选择模块**: - **Bus Creator**:这个模块用于合并...
第12章 物资管理系统 12.1 教学目标与系统预览 12.2 系统分析与设计 12.3 分析与创建数据库 12.4 新建应用程序 12.5 数据库连接模块的实现 12.6 通用数据访问模块的实现 12.7 通用数据命令模块的实现 ...