模块与包

python模块与包

在开始模块与包之前,先看一下他们的定义:

  • 模块:模块对应于Python源代码文件
    ➢python中的模块包括系统模块、第三方模块和用户自定义模块。他们实质上是 以.py为扩展名的文件
    ➢通过导入模块,可以使用该模块中的变量、函数和类等
  • 包:多个功能相似的模块可以组织成一个包

1、模块化程序设计的思想

  • 模块化程序设计的概念

  • 如果程序中包含多个可以重复使用的函数或类,则可以把相关的函数和类分
    组包含在单独的模块(module)中。这些提供计算功能的模块称之为模
    块(或函数模块),导入并使用这些模块的程序,则称之为客户端程序。

  • 把计算任务分离成不同模块的程序设计方法,称之为模块化编程
    (modular programming)。使用模块,可以将计算任务分解为大小合理
    的子任务,并实现代码的重用功能

  • 模块的API

  • 模块和客户端之间遵循的契约称为API

  • API用于描述模块中提供的函数的功能和调用方法

  • 模块化程序设计的基本原则先设计API(即模块提供的函数或类的功能
    描述),然后实现API(即编写程序,实现模块函数或类),最后在客户
    端中导入并使用这些函数或类

  • 通过内置函数help(),可以查看模块的API,还可以通过python在线帮助查看math模块的API

>>>import math
>>>help(math)
  • 模块设计的一般原则

  • (1)先设计API,再实现模块

  • (2)控制模块的规模,只为客户端提供需要的函数。实现包含大量函数的模
    块会导致模块的复杂性。例如,Python的math模块中就不包含正割函数、余
    割函数和余切函数,因为这些函数很容易通过函数math.sin()、math.cos()和
    math.tan()的计算而得

  • (3)在模块中编写测试代码,并消除全局代码

  • (4)使用私有函数实现不被外部客户端调用的模块函数

  • (5)通过文档提供模块帮助信息

  • 模块实现的概念

  • 模块的实现就是若
    干实现函数或类的代码的集合,保存在一个后缀为.py的文件中;

  • 模块的实现必须遵循API规约,可以采用不同算法实现API,

  • 模块化程序设计的优越性

  • 可以编写大规模的系统程序

  • 控制程序的复杂度

  • 实现代码重用

  • 增强可维护性

2、模块的导入与创建

  • 模块导入方式
    模块导入方式有两种
  • import 模块名
  • from 模块名 import 函数名 或
    from 模块名 import *
>>>import math
from math import exp
from math import *
  • 模块导入
    使用import方式导入时:
  • 使用import方式导入模块时,模块中的所有内容都会被导入到当前程序中
  • 使用import还可一次导入多个模块,每个模块名之间使用“,”分割。在命令行中导入某个模块,用户可调用指定模块中的任意方法
>>>import 模块1,模块2,....
>>>模块.方法()

使用from 模块名 import 方法/类/对象
使用import语句导入模块,在每次调用方法时,都需要添加前缀“模块名.”若是有些方法使用频率高,或者模块名较长等,操作起来就比较复杂。但是“from…import…”语句,
就不用在方法前面加前缀“模块.”,其用法:

>>>from random import randint
>>>randint(1,10)

from…import…语句也可一次导入多个方法(或类、对象),多个方法之间用“,”隔开

>>>from random import randint,random,choice
>>>random(1,10)
6
>>>random()
0.5187665930841437

**使用from…import ***
其通配符“*”指代模块中的全部方法,以random模块为例,

>>>from random import *
>>>randint(1,10)
2
>>>random()
0.8772480412046829
  • 创建模块
  • Python模块对应于包含Python代码的源文件(其扩展
    名为.py
  • 在模块中,除了可以定义变量、函数和类之外,还可
    以包含一般的语句,称之为主块(全局语句)。当运
    行该模块,或导入该模块时,主块语句将依次执行

➢ Python文件中的每个文件都可以做为一个模块存在,文
件名即模块名
对于自定义的模块,在没有放到python中之前,调用模块需要把模块的路径添加到搜索路径之后才能调用,操作如下:

>>>import os
>>>os.getcwd()   #查看当前路径
>>>os.chdir('C:\\Users\\z9761\\Desktop\\my_modules')
##更改路径时是双斜杠
>>>import sys
>>>sys.path   #查看搜索路径
>>>import my_modules
>>>help(my_modules)
>>>my_modules.special_add(3,5)
>>>my_modules.pipi

3、模块的搜索路径

模块搜索路径即python搜索模块时的路径,这些路径存储于sys模块中的sys.path属性中
在这里插入图片描述
sys.path的本质是列表,因此用户可通过列表的内置方法append向sys.path中添加模块所在路径,其方法如下:
在这里插入图片描述
注意:添加的路径第一个一定是双斜杠,其它是单斜杠

4、模块的属性

“_all”与"name"

  • __all__属性
    all = [],列表为空,则模块中没有功能可以使用号导入,列表里面包含哪些功能,哪些功能就可以使用号导入
    在这里插入图片描述

在这里插入图片描述

>>>from my_module import *
>>>special_add(3,5)
108

在这里插入图片描述
在这里插入图片描述
__name__属性:
在这里插入图片描述

  • 模块测试代码

  • 每个模块都有一个名称,通过特殊变量__name__可以获取模块
    的名称

  • 特别地,当一个模块被用户单独运行时,其__name__的值为
    main’。故可以把模块源代码文件的测试代码写在相应的测
    试判断中,以保证只有单独运行时,才会运行测试代码

  • 模块的导入特性
    模块在被导入时,会被执行一次,这个过程也叫做加载。一个模块即便被多次导入程序,也会只会被加载一次。

  • 模块的缓存
    在这里插入图片描述
    按字节编译的.pyc文件

  • .pyc文件是经过编译后的字节码,这样下次导入时,如果模
    块源代码.py文件没有修改(通过比较两者的时间戳),则直
    接导入.pyc文件,从而提高程序效率;

  • 按字节编译的.pyc文件是在导入模块时,python解释器自动
    完成,无需程序员手动编译

包及模块的打包发布

包是Python引入的分层次的文件目录结构,它定义了一个由
模块及子包,和子包下的子包等组成的 Python 的应用环境

引入了包以后,只要顶层的包名不与别人冲突,那所有模块
都不会与别人冲突。

➢每一个Python的包目录下面都会有名为__init__.py的特殊文件,
该文件可以为空文件,但是必须存在,它表明这个目录不是
普通的目录结构,而是一个包,里面包含模块。

➢用户可通过编辑子包中的__init__.py文件,再以“from 包.子包 import *”的方式导入子包的指定内容

  • 模块的打包发布
  • 将待发布的包放在与setup.py文件同级的目录中,目录结构如下所示:
    在这里插入图片描述
    在这里插入图片描述
    其中setup函数包含5个参数,依次为:包名、版本号、描述信息、作者以及包中含有的模块,setup不只这些函数,可以自行选择

在当前的路径下打开命令行窗口,使用build命令构建模块:

python setup.py build

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模块与包的内容就到这。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值