Python程序设计与应用课件 第7章 模块与包_第1页
Python程序设计与应用课件 第7章 模块与包_第2页
Python程序设计与应用课件 第7章 模块与包_第3页
Python程序设计与应用课件 第7章 模块与包_第4页
Python程序设计与应用课件 第7章 模块与包_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python程序设计与应用第7章模块与包7.1

命名空间7.2模块7.3

本章小结理解命名空间的概念。掌握模块及模块的导入。了解模块导入的特性及模块内建函数。掌握包的相关概念。Python程序是由包、模块、函数组成的,其中,包是由一系列模块组成的集合,而模块是处理某一类问题的函数或(和)类的集合。学习目标:

命名空间是从变量或标识符的名称到对象的映射。当一个名称映射到一个对象上时,这个名称和这个对象就绑定了。我们可以把命名空间理解为一个容器,在这个容器中可以装许多名称。7.1.1命名空间的分类Python中的一切都是对象,如整数、字符串、列表等数据,此外,还包括函数、模块、类和包本身。这些对象都存在于内存中。但是我们怎么找到所需的对象呢?这就需要首先判断所找的对象所处的命名空间。Python中有3类命名空间:内建命名空间、全局命名空间和局部命名空间。在不同的命名空间中的名称是没有关联的。此外,不同的全局命名空间或不同的局部命名空间,所对应的名称也是没有关联的。7.1命名空间

每个对象都有自己的命名空间,可以通过对象、名称的方式访问对象所处的命名空间下的名称,每个对象的名称都是独立的。即使不同的命名空间中有相同的名称,它们也是没有任何关联的。命名空间都是动态创建的,并且每一个命名空间的生存时间也不一样。内建命名空间是在Python解释器启动时创建,一直存在于当前编程环境中,直到退出解析器。全局命名空间在读入模块定义时,即该模块被导人(import)的时候创建。通常情况下,全局命名空间也会一直保存到解释器退出。局部命名空间在函数或类的方法被调用时创建,在函数返回或者引发了一个函数内部没有处理的异常时删除。7.1命名空间

7.1.2命名空间的规则理解Python的命名空间需要掌握以下3条规则。(1)赋值语句(包括显式赋值和隐式赋值)会把名称绑定到指定对象中,赋值的地方决定名称所处的命名空间。(2)函数、类定义会创建新的命名空间。(3)Python搜索一个名称的顺序是“LEGB”。所谓的“LEGB”是Python中4层命名空间的英文名字首字母的缩写。这里的4层命名空间是上面所说的3个命名空间的一个细分。7.1命名空间

第一层是L(local),表示在一个函数定义中,而且在这个函数里面没有再包含函数的定义。第二层是E(enclosingfunction),表示在一个函数定义中。但这个函数里面还包含有函数的定义。其实L层和E层只是相对的,这两层空间合起来就是上面所说的局部命名空间。第三层是G(global),表示一个模块的命名空间,也就是说在一个.py文件中,且在函数或类外构成的一个空间,这一层空间对应上面所说的全局命名空间。第四层是B(builtin),表示Python解释器启动时就已经加载到当前编程环境中的命名空间。之所以叫builtin,是因为在Python解释器启动时会自动载入_builtin_模块。这个模块中的list、str等内置函数就处于B层的命名空间中。这一层空间对应上面所说的内建命名空间。7.1命名空间

在Python中,模块就是一个包含变量、函数或类的定义的程序文件,除了各种定义之外,还可包含其他的各种Python语句。在大型系统中,往往将系统功能分别使用多个模块来实现或者将常用功能集中在一个或多个模块文件中,然后在顶层的主模块文件或其他文件中导入使用。Python本身也提供了大量内置模块,并可集成各种扩展模块。前面各章中已经使用到了一些Python的内置模块,如小数模块decimal、分数模块fractions、数学模块math等。7.2模块

7.2.1导入模块

模块需要先导入,然后才能使用其中的变量或函数。可使用import或from语句来导入模块,基本格式如下。import模块名称import模块名称as新名称from模块名称import导人对象名称from模块名称import导人对象名称as新名称from模块名称import*7.2模块

1.import语句

import语句用于导入整个模块,可用as为导入的模块指定一个新的名称。使用import语句导入模块后,模块中的对象均以“模块名称.对象名称”的方式来引用。2.from语句

from语句用于导入模块中的指定对象。导人的对象直接使用,不需要使用模块名称作为限定符。3.from…import*语句

使用星号时,可导入模块顶层的全局变量和函数。7.2模块7.2.2导入与执行语句

import和from语句在执行导入操作时,会执行被导人的模块。模块中的赋值语句执行时创建变量,def语句执行时创建函数对象。总之,模块中的全部语句都会被执行,且只执行一次。当再次使用import或from语句导入模块时,不会执行模块代码,只是重新建立到已经创建的对象的引用而已。所以,import和from语句是隐性的赋值语句。(1)Python执行import语句时,创建一个模块对象和一个与模块文件同名的变量,并建立变量和模块对象的引用。(2)Python执行from语句时,会同时在当前模块和导入模块中创建同名变量,并引用模块在执行时创建的对象。7.2模块7.2.3import和from的使用

在使用import导人模块时,模块中的变量名使用“模块名.”作为限定词,所以不存在歧义,即使与其他模块变量同名也没有关系。在使用from时,当前模块的同名变量引用了模块内部的对象。在遇到与当前模块或其他模块变量同名时,使用时应特别注意。1.使用模块内的可修改对象

使用from导人模块时,可以直接使用变量名引用模块中的对象,避免了输人“模块名.”作为限定词。这种便利有时也会遇到麻烦。2.使用from导入两个模块中的同名变量在下面的两个模块test3.py和test4.py中包含了同名的变量名。7.2模块7.2.4重新载入模块

很多时候,再次使用import和from导人模块时,其本意通常是重新执行模块代码,恢复相关变量到模块执行时的状态。显然,这种愿望通过再次使用import和from导入是无法达到的。因此,Python在imp模块中提供了reload函数来重新载入并执行模块代码。使用reload重载模块时,如果模块文件已经被修改,则会执行修改后的代码。reload函数用模块变量名作为参数,重载对应模块,所以reload重载的必须是使用import语句已经导入的模块。7.2模块7.2.5嵌套导入模块

Python允许任意层次的嵌套导入模块。每个模块都是一个名字空间,嵌套导入意味着名字空间的嵌套。在使用模块变量名时,则需要依次使用模块变量名作为限定符。7.2.6模块对象属性和命令行参数

在导入模块时,Python会使用模块文件创建一个模块对象。模块中引用的各种对象的变量名称为对象的属性。Python也为模块对象添加一些内置的属性。可使用dir函数来查看对象属性。7.2模块

在大型系统中,通常会根据代码功能将模块文件放在多个目录中。在导入这种位于目录中的模块文件时,需要指定目录路径。Python将存放模块文件的目录称为包。包是一个有层次的文件目录结构,其定义了一个由模块和子包组成的Python应用程序执行环境。包可以解决如下问题。Python程序设计教程(1)把命名空间组织成由层次的结构(2)允许程序员把有联系的模块组合到一起。(3)允许程序员使用有目录结构而不是一大堆杂乱无章的文件。(4)解决有冲突的模块名称。7.3包

包的顶层目录pytemp应该包含在Python的模块搜索路径中。在包的各个子目录中,必须包含一个_init_py文件,包的顶层目录不需要_init_.py文件。_init_.py文件可以是一个空文件,或者在其中定义_all_列表指定包中可导入的模块。这个文件是用来初始化对应模块的。通过from-import语句导入子句时需要用到该文件。如果不是通过这种方式导入的,则这个文件可以是空文件。包的导入包括绝对路径导入和相对路径导入两种。1.导入包导入包中的模块,需要指明包的路径,在路径中使用点号分隔目录。7.3包

2相对导入Python总是在搜索路径中查找包。相对导入是Python对from语句的扩展,用于在模块文件中使用相对路径来导入包中的模块。在模块路径中,“.”表示from导人命令的模块文件所在的路径,“..”表示包含from导入命令的模块文件所在路径的上一级目录。7.3包

本章主要讲解了以下几个知识点。(1)命名空间。命名空间是从名称到对象的映射。Python中有3类命名空间:内建命名空间、全局命名空间和局部命名空间。不同的命名空间中的名称是没有关联的。(2)模

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论