《Python程序设计基础》-课件 项目八 Python 模块和包_第1页
《Python程序设计基础》-课件 项目八 Python 模块和包_第2页
《Python程序设计基础》-课件 项目八 Python 模块和包_第3页
《Python程序设计基础》-课件 项目八 Python 模块和包_第4页
《Python程序设计基础》-课件 项目八 Python 模块和包_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

任务1模块的导入和使用01任务2包的导入和使用02327任务1

模块的导入和使用3281. 了解模块的概念。2. 了解模块化编程的概念。3. 了解模块化程序设计的优越性。4. 熟悉模块的设计与实现方法。5. 掌握模块的导入、使用和重新加载方法。6. 掌握模块中成员的导入方法。7. 能进行模块及其元素的导入并调用模块。任务目标329一、模块的概念在前面的项目中已经使用了很多模块(如string、time等),通过向程序中导入这些模块,可以使用很多“现成”的函数实现需要的功能。模块就是Python程序。换句话说,任何Python程序都可以作为模块。经过前面的学习,我们已经能够将Python代码写到一个文件中,但随着程序功能越来越复杂,程序体积会不断变大,为了便于维护,通常会将其分为多个文件(模块),这样不仅可以提高代码的可维护性,还可以提高代码的可重用性。相关知识330代码的可重用性体现在,当编写好一个模块后,只要编程过程中需要用到该模块中的某个功能(由变量、函数、类实现),无须做重复性的编写工作,直接在程序中导入该模块即可使用该功能。前面讲了封装,并且介绍了很多具有封装特性的结构,如诸多容器(列表、元组、字符串、字典等),它们都是对数据的封装;函数是对Python代码的封装;类是对方法和属性的封装,也可以说是对函数和数据的封装。模块可以理解为对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个Python文件中,并将其作为一个独立的模块,这样既可以方便其他程序或脚本导入并使用,又能有效避免函数名和变量名发生冲突。331二、模块化编程1. 模块化程序设计在进行程序设计时,将系统按照功能划分为若干部分,每个部分完成特定功能,通过在不同部分间建立联系实现互相协作,完成系统功能的方式称为模块化程序设计,这些提供计算功能的程序块称为模块(或函数模块),导入并使用这些模块的程序称为客户端程序。使用模块可以将计算任务分解为大小合理的子任务,并实现代码的重用。3322. 模块的API在模块化程序设计中,客户端使用模块所提供的函数时,无须深入了解函数的内部实现细节。模块与客户端之间的协定称为API(applicationprogramminginterface,应用程序接口)。API清楚地描述了模块中提供的函数的功能和使用方法。模块化程序设计的基本原则是,首先设计好API,即定义模块所提供的函数或类的功能描述。然后,在此基础上编写具体的程序代码实现模块中的函数或类。最后,客户端可以通过导入模块,并使用其中的函数或类,实现所需的功能,而无须关心其内部的具体实现细节。333通过内置函数help可以查看Python模块的API。其语法格式如下。import模块名help(模块名)在查看模块的API之前,需要使用import语句导入模块,也可以使用Python在线帮助查看模块的API。3343. 模块的实现“实现”是指实现用于重用的函数或类的代码,模块的实现就是若干实现函数或类的代码的集合,保存在扩展名为“.py”的文件中。模块的实现必须遵循API,可以采用不同算法实现API,这为模块的改进和版本升级提供了无缝对接,只需要使用遵循API的新的实现,所有客户端程序无须修改即可正常运行。模块通常是使用Python编写的程序(“.py”文件)。Python内置模块使用C编写并已链接到Python解释器中,还可以使用C或C++拓展编写模块(编译为共享库或DLL文件)。3354. 模块的客户端客户端在使用模块时,需要遵循模块所提供的API调用接口,以导入和调用模块中已实现的函数功能。API的存在使得任何客户端都可以直接使用模块,而无须深入检查模块内部的代码实现。336三、模块化程序设计的优越性模块化程序设计是现代程序设计的基本理念之一,具有如下优越性。(1)可以编写大规模的系统程序:通过把复杂的任务分解为多个子任务,团队合作开发,以完成大规模的系统程序。(2)控制程序的复杂度:分解后的子任务的实现模块代码规模一般被控制在数百行之内,从而可以控制程序的复杂度,各代码调试可以限制在少量的代码范围内。(3)实现代码重用:一旦实现了通用模块(如math、random等),任何客户端都可以通过导入模块直接重用代码,而无须重复实现。(4)增强程序的可维护性:模块化程序设计可以增强程序的可维护性。337四、模块的设计与实现1. 模块设计的一般原则(1)先设计API,再实现模块。(2)控制模块的规模,只为客户端提供需要的函数。实现包含大量函数的模块会导致模块的复杂度高。(3)在模块中编写测试代码,并消除全局代码。(4)使用私有函数实现不被外部客户端调用的模块函数。(5)通过文档提供模块帮助信息。3382. API设计API通常由可用函数的签名的精确规范和描述函数作用的非正式自然语言两部分组成。API一般使用表格的形式描述模块中的变量、函数和类。在编写一个新模块时,建议先设计API,然后实现模块。3393. 创建模块Python模块对应于包含Python代码的源文件(其扩展名为“.py”)。在模块中除了可以定义变量、函数和类,还可以包含一般的语句,即主块语句。当运行该模块或导入该模块时,主块语句将依次执行。一般而言,独立运行的源码中主要包含主块语句,以实现响应的功能。作为库的模块,主要包含可供调用的变量、函数和类,还可以包含用于测试的主块代码。注意:主块代码只在模块第一次被导入时执行,重复导入时不会多次导入、多次执行。3404. 模块的私有函数在实现模块时,有时候需要在模块中定义仅在模块中使用的辅助函数。辅助函数不提供给客户端直接调用,故称之为私有函数。按惯例,应使用以下画线开始的函数名作为私有函数名。私有函数在客户端不能直接调用,故API中不包括私有函数。Python没有强制不允许调用私有函数的机制,但应避免直接调用私有函数。3415. 模块的测试代码每一个模块都有一个名称,通过特殊变量__name__可以获取模块的名称。特别地,当一个模块被用户单独运行时,其__name__的值为'__main__',故可以把模块源码文件的测试代码写在相应的测试判断中,以保证只有单独运行模块时才会运行测试代码。3426. 编写模块文档字符串在程序源码中,可以在特定的地方添加描述性文字,以说明包、模块、函数、类、类方法的相关信息。在函数的第一个逻辑行的字符串称为函数的文档字符串。函数的文档字符串用于提供有关函数的帮助信息。文档字符串一般遵循下列惯例:文档字符串是一个多行字符串;首行以大写字母开始,以句号结尾;第二行是空行;从第三行开始是详细的描述。343用户可以使用以下三种方法抽取函数的文档字符串帮助信息。(1)使用内置函数help。(2)使用函数的特殊属性:函数名.__doc__。(3)使用第三方自动化工具抽取文档字符串信息,以形成帮助文档。3447. 按字节编译的“.pyc”文件在导入模块时,Python解释器为提高程序的启动速度,会在与模块文件同一目录的__pycache__子目录下生成“.pyc”文件。“.pyc”文件是经过编译后的字节码,这样下次导入时如果模块源码“.py”文件没有修改(通过比较两者的时间戳),则直接导入“.pyc”文件,从而提高编程效率。按字节编译的“.pyc”文件在导入时由Python解释器自动完成,无须手动编译。345五、导入模块和使用模块1. 通过import语句导入模块使用import语句可以导入模块。其基本形式如下。import模块名

#导入模块import模块1,模块2,…,模块n

#导入多个模块import模块名as模块别名

#导入模块并使用别名其中,模块名是要导入的模块的名称。注意:模块名区分大小写。3462. 通过内置函数__import__导入模块使用内置函数__import__可以动态导入模块。其基本形式如下。_m=__import__(name)

#将模块name导入_m内置函数__import__有较大的灵活性,如要导入的模块name可以是计算的结果字符串,但一般不直接使用。事实上,import语句在内部调用该函数。3. 使用模块一般在Python源程序的开始位置导入其他模块。在导入模块后,可以使用全限定名称访问模块中定义的成员,即模块名.函数名/变量名347六、导入模块中的成员Python使用from...import语句直接导入模块中的成员。其基本形式如下。from模块名import成员名

#导入模块中的具体成员成员名

#直接调用如果希望同时导入一个模块中的多个成员,可以采用以下形式。from模块名import成员名1,成员名2,…,成员名n如果希望同时导入一个模块中的所有成员,则可以采用以下形式。from模块名import*348注意:虽然from...import语句可以简化代码,但应避免使用,因为这样可能导致名称冲突(如导入多个模块时,多个模块中可能存在同一个名称的函数),且导致程序的可读性差(如导入多个模块时,无法准确确定某个名称的函数具体属于哪一个模块)。349七、重新加载模块importlib模块中的reload函数用于重新加载之前导入过的模块,一般用于交互式执行Python代码不退出解释器的情况,重新加载已更改的Python模块。需要注意的是,重新加载内存中不存在的模块(未导入过)会导致运行错误。350任务2

包的导入和使用3511. 了解包的基本概念。2. 掌握包的创建、导入和使用方法。3. 能正确地从包中导入模块,实例化函数并输出对象地址。任务目标352一、Python的包Python模块是“.py”文件,而包是文件夹。通常,只要文件夹中包含一个特殊的文件“__init__.py”,Python解释器就将该文件夹作为包,其中的模块文件(“.py”文件)属于包中的模块。特殊文件“__init__.py”可以为空,也可以包含属于包的代码,当导入包或该包中的模块时执行“__init__.py”。包可以包含子包,没有层次限制。使用包可以有效避免名称空间冲突。相关知识353354二、创建包包和模块组成的层次组织结构对应文件夹和模块文件。创建包,首先需要在指定目录中创建对应包名的目录,然后在该目录下创建一个特殊文件“__init__.py”,最后在该目录下创建模块文件。355三、包的导入和使用在使用import语句导入包中的模块时需要指定对应的包名。其基本形式如下。import[包名1.[包名2…]].模块名#导入包中模块其中,包名是模块的上层组织包的名称。注意:包名和模块名区分大小写。在导入包中的模块后,可以使用全限定名称访问包中模块定义的成员。其基本形式如下。[包名1.[包名2…]].模块

温馨提示

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

评论

0/150

提交评论