资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2020/11/15,#,源程序模块结构,模块的定义与使用,Python中的包,引用其他模块,日期时间函数,测试及打包,第八章 模块和包,参考书目,Python,程序设计,源程序模块结构第八章 模块和包参考书目Python 程序设,1,目录,源程序模块结构,模块的定义与使用,Python中的包,引用其他模块,日期时间函数,测试及打包,这里说明图片内容,目录源程序模块结构这里说明图片内容,2,源程序模块结构,Python,的程序是由包(,package,)、模块(,module,)和函数组成。模块是处理某一类问题的集合,模块由函数和类组成。包是由一系列模块组成的集合。,源程序模块结构Python的程序是由包(package)、模,3,源程序模块结构,包就是有一个完成特定任务的工具箱,,Python,提供了许多有用的工具包,如字符串处理、图形用户接口、,Web,应用、图形图像处理等。,一个程序完整的结构,有如下几部分组成:,(1),模块文档,模块文档使用,三双引号注释,的形式,简要介绍模块的功能及重要全局变量的含义。,(2),模块导入,导入需要调用的其他模块。模块,只能被导入一次,,被导入模块中的函数代码并不会被自动执行,只能被当前模块主动(显式)调用。,源程序模块结构 包就是有一个完成特定任务的工具,4,源程序模块结构,(3),变量定义,在这里定义的变量本模块中的所有函数都可直接使用。,(4)类定义语句,所有类都需要在这里定义。当模块被导入时,class语句会被执行,类就会被定义。,(5)函数定义语句,此处定义的函数可以通过CircleArea.calcuArea()在外部被访问到,当本模块被其他模块导入时def语句会被执行,其他模块可调用calcuArea这个函数。,(6)主程序,无论这个模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码。通常这里不会有太多功能性代码,而是根据执行的模式调用不同的函数。,源程序模块结构,5,模块的定义与使用,Python,提供了强大的模块支持,主要体现为不仅在,Python,标准库中包含了大量的模块(称为,标准模块,),而且还有很多,第三方模块,,另外开发者自己也可以,开发自定义模块,。通过这些强大的模块支持,将极大地提高我们的开发效率。,模块的英文是,Modules,,可以认为是一盒(箱)主题积木,通过它可以拼出某一主题的东西。这与函数不同,一个函数相当于一块积木,而一个模块中可以包括很多函数,也就是很多积木,所以也可以说模块相当于一盒积木。,模块的定义与使用 Python提供了强大的模块支持,主,6,模块的定义与使用,1,模块的概念,模块,模块是把一组相关的名称、函数、类或者是它们的组合组织到一个文件中。如果说模块是按照逻辑来组织Python代码的方法,那么文件便是物理层上组织模块的方法。因此一个文件被看作一个独立的模块,一个模块也可以被看作一个文件。,模块的文件名就是模块的名字加上扩展名.py。,模块的定义与使用1 模块的概念模块模块是把一组相关的名称,7,2 使用import语句导入模块,使用模块需要先以模块的形式加载模块中代码,这样就可以使用import语句实现:,import 模块名称 as 别名,使用import语句导入模块时,模块时区分字母大小写的,比如:import os,,可以在一行内导入多个模块,如:import time,os,sys。,模块的定义与使用,2 使用import语句导入模块使用模块需要先以模块的形式加,8,3 使用fromimport语句导入模块,在使用import语句导入模块时,每执行一条import语句都会创建一个新的命名空间(namespace,即记录对象名字和对象之间对应关系的空间。目前Python的命名空间大部分都是通过字典来实现的。其中,key是标识符;value是具体对象。),并且在该命名空间中执行与.py文件相关的所有语句。,模块的定义与使用,3 使用fromimport语句导入模块,9,3 使用fromimport语句导入模块,在执行时,需在具体的变量、函数和类名前,加上“模块名.”前缀,。如果不想每次都导入模块时都创建一个新的命名空间,而是将具体的定义导入到当前的命名空间中,这时就可以使用fromimport语句。使用fromimport语句导入模块后,不需要再添加前缀,直接通过具体的变量、函数和类名等访问即可。,fromimport语句的语法格式如下:,from modelname import member,模块的定义与使用,3 使用fromimport语句导入模块在执行时,需在具体,10,4模块搜索目录,模块的定义与使用,有时候导入模块操作会失败,如:,import oos,Traceback(most recent call last):,File,line 1,in,ModuleNotFoundError:No module named oos,发生这样的错误时,解析器会提示说无法访问请求的模块,可能的原因是模块不在搜索路径里,从而导致了路径搜索的失败。,4模块搜索目录模块的定义与使用有时候导入模块操作会失败,如:,11,4模块搜索目录,模块的定义与使用,当使用import语句导入模块时,默认的查找顺序,:,首先是在当前目录(即执行的Python脚本文件所在的目录)下查找;,其次到PYTHONPATH(环境变量)下的每个目录中查找,;,最后到Python的默认安装目录下查找。,查找的各个目录的具体位置保存在标准模块sys的sys.path变量中。查看本机sys.path的内容的代码如下:,import sys,print(sys.path),4模块搜索目录模块的定义与使用当使用import语句导入模块,12,4模块搜索目录,模块的定义与使用,注意,不同的系统,搜索路径一般都不同。,添加指定的目录到sys.path有三种方法:,(1)sys.path.append(),例如,把“c:practice”目录添加到sys.path目录中,可以采用如下代码:,import sys,sys.path.append(“c:/practice”),缺点:需要执行代码,且只为内存临时修改,程序退出后清空变量。,4模块搜索目录模块的定义与使用注意,不同的系统,搜索路径一般,13,4模块搜索目录,模块的定义与使用,(2)在系统环境中新增PYTHONPATH变量,指向想要的path搜索路径,。,缺点:修改了环境变量,对复杂环境需求易造成冲突。,(3)在site-packages下建立一个扩展名为.pth的文件,并添加需要自定义包含引入的路径,否则新添加的目录不起作用。,修改完成后,就可以加载自己的模块了。只要这个列表中的某个目录包含这个文件,该模块就会被正确导入。如:,使用sys.modules可以查看当前导入了哪些模块和它们来自什么地方。sys.modules是一个字典,使用模块名作为键(key),对应的物理地址作为值(value)。,4模块搜索目录模块的定义与使用(2)在系统环境中新增PYTH,14,5模块内建函数,模块的定义与使用,1._import_()函数,import语句调用了该函数来实现模块的导入,提供这个函数是为了让有特殊需要的用户可以覆盖它,实现自定义的导入算法。,语法如下:,_import_(name,globals,locals,fromlist,level),5模块内建函数模块的定义与使用1._import_()函数,15,5模块内建函数,模块的定义与使用,2.globals()函数和locals()函数,globals()和locals()两个内建函数分别返回调用处可以访问的全局和局部命名空间中的名称组成的字典。,3.reload()函数,reload()函数可以重新导入一个已经导入的模块,from imp import reload,reload(module),module是用户想要重新导入的模块,,,模块必须是全部导入,reload()函数的参数必须是模块自身而不是模块名称的字符串,5模块内建函数模块的定义与使用2.globals()函数和,16,6绝对导入和相对导入,模块的定义与使用,1.绝对导入,在import语句或者from导入模块,模块名称最前面不是以.点开头的,绝对导入总是去搜索模块搜索路径中找,2.相对导入,只能在包内使用,且只能用在from语句中,使用.点号,表示当前目录内,.表示上一级目录,不要在顶层模块中使用相对导入,6绝对导入和相对导入模块的定义与使用1.绝对导入,17,Python中的包,使用模块可以避免函数名和变量名重名引发的冲突。面对,模块名重复如何解决,的问题,Python中提出了包(Package)的概念。所谓包的是一个,有层次的文件目录结构,,通常将一组功能相近的模块组织在一个目录下,它定义了一个由模块和子包组成的Python应用程序执行环境。包可以解决如下问题:,(1)把命名空间组织成有层次的结构;,(2)允许程序员把有联系的模块组合到一起;,(3)允许程序员使用有目录结构而不是一大堆杂乱无章的文件;,(4)解决有冲突的模块名称。,Python中的包使用模块可以避免函数名和变量名重名引发的,18,1Python程序的包结构,包简单理解就是“,文件夹,”,作为目录存在的,包的另外一个特点就是文件夹中必须有一个,_init_.py文件,,包可以包含模块,也可以包含包。常见的包结构如下:,Python中的包,1Python程序的包结构包简单理解就是“文件夹”,作为目录,19,2创建和使用包,1.创建包,创建包实际上就是创建一个文件夹,并且在该文件夹中创建一个名称为“_init_.py”的Python文件。在_init_.py文件中,可以不编写任何代码,也可以编写一些Python代码。在_init_.py文件中所编写的代码,在导入包时会自动执行。,比如在C盘的根目录下创建一个名称为config的包,具体步骤如下:,(1)在计算机的C盘目录下,创建一个名称为config的文件夹。,(2)在config文件夹下,创建一个名称为“_init_.py”的文件。,至此,名称为config的包就创建完成了,然后可以在该包下创建所需要的模块。,Python中的包,2创建和使用包1.创建包 Python中的包,20,2创建和使用包,2.使用包,对于包的使用通常有3种方式:,(1)通过“import 完整包名.模块名”的形式加载指定模块。,比如在config包中,有个size的模块,导入时,可以使用代码:,import config.size,若在size模块中定义了3个变量,比如:,length=30,width=20,height=10,创建“main.py”文件,在导入size模块后,在调用length、width和height变量时,需要在变量名前加入“config.size”前缀。,Python中的包,2创建和使用包2.使用包 Python中的包,21,2创建和使用包,(2)通过“from 完整包名 import 模块名”的形式加载指定模块。,与第,一,种方式的区别在于,在使用时,不需要带包的前缀,但需要带模块名称。,(3)通过“from 完整包名.模块名 import 定义名”的形式加载指定模块。,与前两种方式的区别在于,通过该方式导入模块的函数、变量或类后,在使用时直接使用函数、变量或类名即可。,Python中的包,2创建和使用包(2)通过“from 完整包名 import,22,引用其他模块,在Python中,除了可以自定义模块外,还可以引用其他模块,比如标准模块和第三方模块。,引用其他模块 在Python中,除了可以自定,23,1第三方模块的下载与安装,在Python中,除了可以使用Python内置的标准模块外,还可以使用第三方模块。这些第三方模块可以在Python的官方推出的网站
展开阅读全文