模块与包

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

模块化程序设计

如果程序中包含多个可以复用的函数或者类,则通常把相关的函数和类分组包含在单独的模块中,这些提供计算功能的模块称之为模块(或者函数模块),导入并使用这些模块的程序,则称之为客户端程序
把计算任务分离成不同的程序设计方法,称之为模块化编程。使用模块,可以将计算任务分解为大小合理的子任务,并实现代码的重用功能。

模块的API

客户端使用模块提供的函数时,无须了解其实现细节
模块和客户端之间遵循的契约称之为API;
API 用于描述模块中提供的函数功能和调用方法。
模块的API(Application Programming Interface)
模块化程序设计的基本原则是先设计API(即模块提供的函数或类的功能 描述),然后实现API(即编写程序,实现模块函数或类),最后在客户 端中导入并使用这些函数或类;
通过内置函数help(),可以查看Python模块的API;
•通过内置函数help()查看math模块的API
•通过Python在线帮助查看math模块的API

API设计

API定义客户端和实现之间的契约。API是一个明确的规范,规定“实现” 的具体功能是什么
API通常由两部分组成:可用函数的签名的精确规范,以及描述函数作 用的非正式自然语言描述。API一般使用表格的形式,描述模块中的变 量、函数和类
当编写一个新模块时,建议先设计API,然后实现模块
如:设计实现算术四则运算的模块(my_math1.py)的API

模块的实现的概念

“实现”是指实现用于重用的函数或类的代码,模块的实现就是若 干实现函数或类的代码的集合,保存在一个后缀为.py的文件中;
模块的实现必须遵循API规约,可以采用不同算法实现API,这为模 块的改进和版本升级提供了无缝对接,只需要使用遵循API的新的实 现,所有客户端程序无须修改即可以正常运行。

模块的客户端

客户端遵循API提供的调用接口,导入和调用模块中实 现的函数功能;
API允许任何客户端直接使用模块,而无需检测模块中 定义的代码,例如可以直接使用模块math和random等。

模块导入(import)

使用import格式导入模块时,模块中的所有内容都会被导入到当前程序中。

import 模块,模块2,

导入模块中的部分内容:

from 模块 import 方法/类/对象

以random 为例:

from random import randint
randit(1,10)
2

可以一次导入多个方法,多个方法间用“,”隔开

from random import randit,random
randit(1,10)
10
random()

from…import * 其中“ * ”指代指定模块中的全部方法。以random为例:

from random import *
randit(1,10)
4
randrange(0,10,2)

使用from…import语句可以简化方法的调用方式,但若导入文件中存在与导入内容重名的方法,变量或者类时,程序执行将会出错。因此,相对而言,使用import语句导入模块更安全。

创建模块

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

Python文件中的每个文件都可以做为一个模块存在,文件名即模块名。

模块的搜索路径

模块搜索路径即Python搜索模块时的路径,这些路径存储于sys模块中的sys.path属性中,用户可先在解释器中导入sys模块,再查看sys.path的值。

import sys
sys.path

sys.path的本质是列表,因此用户可通过列表的内置方法append动态地向sys.path中添加模块所在路径,假设将路径“E:\Python\workspace”添加到搜索路径中,其方法如下:

sys.path.append(“E:\Python\workspace”)

模块的导入顺序

导入模块时,解释器按下列目录搜索路径和文件搜索顺序 查找并导入文件。目录搜索路径为:
(1)当前目录。启动交互式Python的目录,或Python主 程序位于的目录。
(2)操作系统环境变量PYTHONPATH中指定的目录。
(3)Python标准库目录

模块搜索路径sys.path

sys模块的sys.path属性返回一个路径列表 • 使用import语句导入模块时,系统自动从该列表的路径中搜索 模块,如果没有找到,则程序报错
【例】模块搜索路径示例

import sys
sys.path

【例】临时增加模块搜索路径示例

import sys
sys.path.append(‘c:\pythonpa\works’)

模块的测试代码

每个模块都有一个名称,通过特殊变量__name__可以获取模块 的名称
特别地,当一个模块被用户单独运行时,其__name__的值为 ‘main’。故可以把模块源代码文件的测试代码写在相应的测 试判断中,以保证只有单独运行时,才会运行测试代码

按字节编译的.pyc文件

pyc文件是经过编译后的字节码,这样下次导入时,如果模 块源代码.py文件没有修改(通过比较两者的时间戳),则直 接导入.pyc文件,从而提高程序效率;
按字节编译的.pyc文件是在导入模块时,python解释器自动 完成,无需程序员手动编译。

包是Python引入的分层次的文件目录结构,它定义了一个由 模块及子包,和子包下的子包等组成的 Python 的应用环境。 引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。
每一个Python的包目录下面都会有名为__init__.py的特殊文件, 该文件可以为空文件,但是必须存在,它表明这个目录不是普通的目录结构,而是一个包,里面包含模块。

模块的打包发布

用户可将自己编写的模块打包为可安装的压缩包。分享给其他开发人员。
将待发布的包放在与setup.py文件同级的目录中,目录结构如下所示。

编辑setup.py脚本文件,setup.py文件中包含的内容如下:

from distutils.core import setup

setup(
name=‘itheima’,
version=‘1.0’,
description=‘itheima belongs to itcast’,
author=‘itcast’,
py_modules=[‘suba,aa’,‘suba.bb’,‘suba.cc’,‘suba.dd’]
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值