模块与包以及部分Python学习手册的摘录

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

模块化程序设计的概念

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

模块设计的一般原则

(1)先设计API,再实现模块
(2)控制模块的规模,只为客户端提供需要的函数。实现包含大量函数的模
块会导致模块的复杂性。例如,Python的math模块中就不包含正割函数、 余割函数和余切函数,因为这些函数很容易通过函数math.sin()、math.cos()和
math.tan()的计算而得
(3)在模块中编写测试代码,并消除全局代码
(4)使用私有函数实现不被外部客户端调用的模块函数
(5)通过文档提供模块帮助信息

模块化程序设计的优越性

可以编写大规模的系统程序
控制程序的复杂度
实现代码重用
增强可维护性

模块的导入方式

                               方式一                         方式二

模块的导入      import模块名                 from模块名 import 函数名 或:from 模块名 import *

导入示例        import combinatoriall       from combinatorial import fac,comb
                                                               或者: from combinatorial import *
函数调用        模块名,函数名              函数名
函数调用示例    combinatorial.fac(10)       fac(10)

frоm…іmроrt…语句也可以一次性导入多个方法

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

random()
e.9545396343447562

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

创建模块

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

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

import os
os. getcwd() #查看当前路径
os. chdir(’ F:\my_modules’ ) #修改当前路径

import sys
sys. path #查看搜索路径

模块的搜索路径

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

impprt sys
sys.path # 这里的路径根据Python安装路径而变化
[’’,‘E: \Python-3.5.2-embed-win32\Python35.zip’ ,
‘E:\Python-3.5.2-embed-win32\DLLs’,
‘E:\Python-3.5.2- embed-win32\lib’,
‘E:\Python-3.5.2- embed-win32’]

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

  >>> sys . path. append("E: \Python\workspace)

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

模块的属性
"all’'变量控制模块里哪些功能可以使*号导入
"name"可以获取模块的名称

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

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

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

模块的私有函数
• 实现模块时,有时候需要在模块中定义仅在模块中使用的辅助函数。辅
助函数不提供给客户端直接调用,故称之为私有函数
• 按惯例,Python程序员使用下划线开始的函数名作为私有函数。私有函
数客户端不应该直接调用,故API中不包括私有函数
• Python语言没有强制不允许调用私有函数的机制,程序员应该避免直接
调用私有函数

编写模块文档字符串
• 在函数的第一个逻辑行的字符串称为函数的文档字符串。函数的文档字
符串用于提供有关函数的帮助信息;
• 文档字符串一般遵循下列惯例:文档字符串是一个多行字符串;首行以
大写字母开始,句号结尾;第二行是空行;从第三行开始是详细的描述
• 可以使用三种方法抽取函数的文档字符串帮助信息:
①使用内置函数:help(函数名);
②使用函数的特殊属性:函数名.doc
③第三方自动化工具也可以抽取文档字符串信息,以形成帮助文档

重新加载模块
reload函数会强制已加载模块的代码重新载入并重新执行。文件中新的代码的赋值语句会在原位置修改现有的模块对象
与import和from不同的是:
reload在python中是一个函数,而不是一条语句
reload传入参数是一个已经存在的模块对象,而不是一个新的名称
reload在python3.x中位于模块之中,并且必须导入才能使用

注意:不要把包__init__py文件和__init__构造函数方法混淆起来。前者是当导人初次遍历一个包目录时所运行代码的文件,而后者是在创建一个实例对象时才调用的函数。它们都具有初始化的作用,但它们有着很大的区别,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值