书签 分享 收藏 举报 版权申诉 / 54
上传文档赚钱

类型Python程序设计第5章-模块和包课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2921322
  • 上传时间:2022-06-11
  • 格式:PPT
  • 页数:54
  • 大小:2.23MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《Python程序设计第5章-模块和包课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Python 程序设计 模块 课件
    资源描述:

    1、2022-6-9第第5章章 模块和包模块和包主 讲 人:目录目录2022-6-921.为什么使用模块2.模块的创建与使用3.包导入实例2022-6-9概述概述本章要解决的问题如下: 什么是模块 为什么使用模块 如何使用模块 包以及实例2022-6-91.为什么使用模块1.1 为什么使用模块 首先,提高了代码的可维护 其次,提高了代码的可重用性 最后,避免了函数名和变量名冲突2022-6-91.为什么使用模块1.2 模块角色从抽象的视角来看,模块至少有三个角色 代码的重用 系统命名空间的划分 服务和数据的共享目录目录2022-6-921.为什么使用模块2.模块的创建与使用3.包导入实例2022-

    2、6-92.模块的创建与使用2.1Python程序架构1Python程序架构实例图2022-6-92.模块的创建与使用假设上图中的文件b.py定义了一个名为spam的函数,如下所示:def spam(text): print(text,spam)现在,假设a .py想要使用spam,为了实现这个目标,a.py中包含如下Python语句:import bb.spam(gumby)2022-6-92.模块的创建与使用2.1Python程序架构2模块 程序和模块:Python中,程序是作为一个主体的、顶层的文件来构造的,配合零个或多个支持文件,这些支持文件都可以称作模块。 顶层文件:包含了程序的主要的

    3、控制流程,即需要运行来启动应用的文件。2022-6-92.模块的创建与使用2.1Python程序架构2模块 模块文件:可看作是工具的仓库,这些仓库是用来收集顶层文件(或其他可能的地方)使用的组件。 顶层文件与模块文件:顶层文件使用了在模块文件中定义的工具,这些模块文件也使用了其他模块所定义的工具。2022-6-92.模块的创建与使用2.1Python程序架构 模块的执行环境:模块包含变量、函数、类以及其他的模块(如果导入的话),而函数也有自己的本地变量。右图右图描述了模块内的情况以及与其他模块的交互。模块构成及工作原理图2022-6-92.模块的创建与使用2.1Python程序架构 模块间的关

    4、系:模块可以被导入,但模块也会导入和使用其他模块,这些模块可以用Python或其他语言写成。2022-6-92.模块的创建与使用2.1Python程序架构3模块导入定义:一个文件可通过加载一个模块(文件),从而读取这个模块(文件)的内容,即导入。(1)模块导入的三种方式import Xfrom X import *from X import a, b, c2022-6-92.模块的创建与使用2.1Python程序架构3模块导入(2)导入模块时,Python都做了哪些事情?2022-6-92.模块的创建与使用2.1Python程序架构3模块导入(3)导入模块时的路径搜索顺序。 程序的主目录:即程

    5、序(顶层)文件所在的目录,而非启动程序所在的目录(当前工作目录。 环境变量(PYTHONPATH)目录。 标准链接库目录。 任何.pth文件的内容(如果存在的话),在安装目录下找到该文件,以行的形式加入所需要的目录即可。2022-6-92.模块的创建与使用2.2模块搜索路径1模块搜索路径2022-6-92.模块的创建与使用2.2模块搜索路径1模块搜索路径sys.path的初始值来自于以下地方。 包含脚本的当前路径。 PYTHONPATH。 默认安装路径。 编译过的Python文件(.pyc文件)。 built-in模块。2022-6-92.模块的创建与使用2.2模块搜索路径2配置搜索路径 方法

    6、一:添加环境变量PYTHONPATH。python会添加此路径下的模块,在.bashrc文件(这个文件主要保存一些个性化设置,如命令别名,路径等)中添加如下类似行。export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.0/site-packages2022-6-92.模块的创建与使用2.2模块搜索路径 方法二:在包内添加。在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称。 windows c:python3.0site-packages linux(ubunt

    7、u) /usr/local/lib/python3.0/dist-packages linux(redhat) /usr/lib/python3.0/site-packages2022-6-92.模块的创建与使用2.2模块搜索路径 方法三:函数添加。sys.path.append()函数添加搜索路径,参数值即为要添加的路径。 import sys 查看sys.path 添加sys.path.append(c:)2022-6-92.模块的创建与使用2.3模块导入语句1import语句 import导入为绝对导入。 import 只能导入模块,不能导入模块中的对象(类、函数、变量等)2022-6-

    8、92.模块的创建与使用2.3模块导入语句2嵌套import(1)顺序嵌套例如:本模块导入 A 模块(import A),A 中又 import B,B 模块还可以 import 其他模块。2022-6-92.模块的创建与使用2.3模块导入语句2嵌套import(2)循环嵌套,程序如下:#A.py from B import Dclass C:pass文件 B.py from A import Cclass D:pass为什么执行A的时候不能加载D呢?2022-6-92.模块的创建与使用2.3模块导入语句如果将 A.py 改为:import B就可以了。这是怎么回事呢?这跟Python内部 im

    9、port 的机制是有关的,具体到 from B import D,Python 内部会分成以下几个步骤(具体如右图所示)。2022-6-92.模块的创建与使用2.3模块导入语句这个例子的执行顺序如下(具体如右图所示)。2022-6-92.模块的创建与使用2.3模块导入语句3from语句 因为from会把变量名复制到另外一个作用域,所以它就可以直接在脚本中使用复制后的变量名,而不需要通过模块(例如printer)。 from module1 import printer #复制一个变量 printer(Hello world!) 2022-6-92.模块的创建与使用2.3模块导入语句4from

    10、*语句 当使用from *时,会取得模块顶层所有赋了值的变量名。在脚本中就可以直接使用得到的变量名printer,而不需要通过模块名。 from module1 import * #复制所有变量 print(Hello world!) Hello world! 2022-6-92.模块的创建与使用2.3模块导入语句5导入只发生一次 模块会在第一次import或from时载入并执行,并且只在第一次如此。2022-6-92.模块的创建与使用2.3模块导入语句6import和from是赋值语句(1)from将一个或多个变量名赋值给另一个模块中同名的对象,例子如下:x=1y=1,2%python fr

    11、om small import x,y #复制两个变量 x=42 #修改x值 y0=42 #修改共享变量2022-6-92.模块的创建与使用2.3模块导入语句6import和from是赋值语句(2)文件变量名的改变2022-6-92.模块的创建与使用2.3模块导入语句6import和from是赋值语句(3)import和from的对等性像这样的from语句:from module import name1,name2 #复制两个变量与下面这些语句是等效的:import module #获取模块对象name1=module.name1 #赋值name2=module.name2 del modu

    12、le #删除模块名2022-6-92.模块的创建与使用2.3模块导入语句7from语句潜在的陷阱 from语句会让变量位置更隐秘和模糊,且从理论上讲,from语句有破坏命名空间的“潜质”。如果使用from导入变量,而那些变量碰巧和作用域中现有变量同名,变量就会被悄悄地覆盖掉。 另一方面,和reload调用同时使用时,from语句有比较严重的问题,因为导入的变量名可能引用之前版本的对象。2022-6-92.模块的创建与使用2.4模块命名空间 模块最好理解为变量名的封装,也就是定义想让系统其余部分看见变量名的场所。简而言之,模块就是命名空间(变量名建立所在的场所),而存在于模块之内的变量名就是模块

    13、对象的属性。2022-6-92.模块的创建与使用2.4模块命名空间1文件生成命名空间 模块语句会在首次导入时执行 顶层的赋值语句会创建模块属性 模块的命名空间能通过属性_dict_或dir(M)获取2022-6-92.模块的创建与使用2.4模块命名空间LEGB(用来规定命名空间查找顺序的规则)含义解释如下。 L-Local(function):函数内的名字空间。 E-Enclosing function locals:外部嵌套函数的名字空间(例如closure)。 G-Global(module):函数定义所在模块(文件)的名字空间。 B-Builtin(Python):Python内置模块的

    14、名字空间。2022-6-92.模块的创建与使用2.4模块命名空间假设往文本编辑器中建立如下的模块文件,并将其命名为module2.py。print(starting to load.)import sysname=42def func():pass #定义一个空函数,pass是占位符class klass:pass #定义一个空类,pass是占位符print(done loading.)执行结果 import module2starting to load.done loading.2022-6-92.模块的创建与使用2.4模块命名空间但是,一旦模块加载后,它的作用域就变成模块对象(由impo

    15、rt取得)的属性的命名空间,然后可以结合其模块名,通过它来获取命名空间内的属性。 module2.sys module2.name42 module2.func module2.klass2022-6-92.模块的创建与使用2.4模块命名空间2属性名的点号运算 点号运算其实就是表达式,传回和对象相配的属性名的值,LEGB规则只适用于无点号运算的纯变量名。其规则如下: 简单变量 点号运算 通用性。2022-6-92.模块的创建与使用2.4模块命名空间3导入和作用域 无论程序中的导入结构或函数调用的结构是什么情况,变量的含义一定是由源代码中的赋值语句的位置决定的,而属性总是伴随着对对象的请求。换句

    16、话说,导入操作不会赋予被导入文件中的代码对上层代码的可见度。被导入文件无法看见进行导入的文件内的变量名。2022-6-92.模块的创建与使用2.4模块命名空间4命名空间的嵌套 虽然模块导入不会使命名空间发生向上的嵌套,但会发生向下的嵌套。利用属性的点号运算路径,有可能深入到任意嵌套的模块中并读取其属性。2022-6-92.模块的创建与使用2.5reload 在python中,每一个以.py结尾的Python文件都是一个模块,其他的文件可以通过导入一个模块来读取该模块的内容。默认情况下,模块在第一次被导入之后,其他的导入都不再有效。那么想要使得Python在同一次会话中再次运行文件,就需要调用i

    17、mp标准库模块中的reload函数。2022-6-92.模块的创建与使用2.5reloadreload与import和from的不同之处如下。 reload是Python *的内置函数,而不是语句。 传给reload的是已经存在的模块对象,而不是变量名。 reload在Python 3.0中位于模块之中,并且必须导入自己。2022-6-92.模块的创建与使用2.5reload此外,import语句和reload调用的语法并不相同,reload需要小括号,但import不需要。重载如下所示:import module #初始导入use module.attributes #使用模块from im

    18、p import reload #获取重载函数reload(module) #重载模块use module.attributes2022-6-92.模块的创建与使用2.5reload程序重载任何引用该模块对象的地方,自动会受到reload的影响,下面是一些细节: reload会在模块当前命名空间内执行模块文件的新代码 文件中顶层赋值语句会使得变量名换成新值 重载会影响所有使用import读取了模块的客户端 重载只会对以后使用from的客户端造成影响目录目录2022-6-921.为什么使用模块2.模块的创建与使用3.包导入实例2022-6-93.包导入实例包的组成 Python的程序由包(pac

    19、kage)、模块(module)和函数组成。包是由一系列模块组成的集合,模块是处理某一类问题的函数和类的集合,它们之间的关系如右图所示。2022-6-93.包导入实例包与模块的树形图 首先定义一个包parent,在parent包中创建两个子包pack和pack2,pack包中定义一个模块myModule,pack2包中定义一个模块myModule2。最后在包parent中定义一个模块main,调用子包pack和pack2,树形图如右图所示。2022-6-93.包导入实例 包pack的_int_.py程序如下所示:if _name_=_main_: print(作为主程序运行)else: pri

    20、nt(pack初始化) 这段代码初始化pack包,直接输出一段字符串。当pack包将其他模块调用时,将输出“pack初始化”。2022-6-93.包导入实例 包pack的myModule模块如下所示:def func(): print(pack.myModule.func()if _name_=_main_: print(作为主程序运行)else: print(pack初始化)当pack2包被其他模块调用时,先执行_int_.py文件。2022-6-93.包导入实例 pack2包的_int_.py程序如下所示。if _name_=_main_: print(作为主程序运行)else: prin

    21、t(pack2初始化)2022-6-93.包导入实例 包pack2的myModule2模块如下所示。def func2(): print(pack2.myModule2.func()if _name_=_main_: print(作为主程序运行)else: print(pack2初始化)2022-6-93.包导入实例 下面的main模块调用了pack、pack2包中的函数。from pack import myModulefrom pack2 import myModule2myModule.func()myModule2.func2()_init_.py也可以用于提供当前包的模块列表。2022-6-93.包导入实例 例如,在pack包的_init_.py文件前面添加一行代码。 _all_=myModule _all_用于记录当前pack包所包含的模块。其中方括号中的内容是模块名的列表,如果模块数量超过两个,使用逗号分开。同理,在pack2包也添加一行类似的代码: _all_=myModule2 这样就可以在main模块中一次导入pack、pack2包中所有的模块。2022-6-93.包导入实例 修改后的main模块如下所示。from pack import *from pack2 import *myModule.func()myModule2.func2()

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Python程序设计第5章-模块和包课件.ppt
    链接地址:https://www.163wenku.com/p-2921322.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库