ad

《Python学习笔记 从入门到实战》_更了解Python的途径之一_8.1 模块 包和迭代器

网友投稿 158 2023-11-07

【摘要】 本书摘自《Python学习笔记 从入门到实战》一书中第8章,第1节,由张学建编著。

第8章 模块、包和迭代器

( 视频讲解:33分钟)

《Python学习笔记 从入门到实战》_更了解Python的途径之一_8.1 模块 包和迭代器

在前面的内容中,已经讲解了 Python 语言面向对象编程技术的基 本知识,在本章的内容中,将进一步向读者介绍面向对象编程技术的核 心知识,主要包括模块导入、包和迭代器等内容,为读者步入本书后面 知识的学习打下坚实的基础。

8.1 模块架构

8.1.1 最基本的模块调用

在前面的内容中,已经详细讲解了和模块化开发相关的基本知识,例如在下面的实例代 码中,演示了在程序中调用外部模块文件的过程。

实例8-1:在程序中调用外部模块文件

源码路径:下载包\daimal\8\8-1

实例文件mokuai.py 使用三种方式调用外部文件,具体实现代码如下所示。

import math

from math import sqrt

import math as shuxue

print("下面是数学函数:")

print( '调用math.sqrt:\t',math.sqrt(3))

#导入math 模块

#从math 模块中导入sqrt() 函数

#导入math模块,并将此模块新命名为shuxue

#调用math模块中的sqrt()函数

#直接调用sqrt() 函数

print('调用shuxue.sqrt;\t',shuxue.sqrt(5)) #等价于调用 math 模块中的sqrt() 函数

在上述代码中,分别使用三种不同的方式导入了math 模块或其中的函数,然后分别以 三种不同的方式导入对象。虽然被导入的都是同一个模块或模块中的内容(都是调用了系统 内置库函数中的 math.sqrt() 方法),但是相互之间并不冲突。执行后会输出:

下面是数学函数:

调用 math.sqrt: 1.732050807568877在 Python 程序中,不能随便导入编写好的外部模块,只有被 Python找到的模块才能被 导入。如果自己编写的外部模块文件和调用文件处于同一个目录中,那么可以不需要特殊设 置就能被 Python 找到并导入。但是如果两个文件不在同一个目录中呢?例如在下面的实例 中分别编写了外部调用模块文件 module_test.py 和测试文件 but.py, 但是这两个文件不是在 同一个目录中。

实例8-2:外部模块文件和测试文件不在同一个目录

源码路径:下载包\daima\8\8-2

上述错误提示我们没有找到名为“module_test” 的模块,在程序中 Python 导入一个模 块时,解释器首先在当前目录中查找要导入的模块。如果没有找到这个模块, Python 解释 器会从 “sys” 模块中的 path 变量指定的目录查找这个要导入的模块。如果在以上所有目录 中没有找到这个要导入的模块,则会引发ImportError 错误。

注意:在导入模块时首先需要查找的路径是当前目录下的模块。

在大多数情况下, Python 解释器会在运行程序前将当前目录添加到 sys.path 路径的列表 中,所以在导入模块时首先查找的路径是当前目录下的模块。在 Windows 系统中,其他默 Linux 系统中,默认模块查找路径为:/usr/lib 、/usr/ib64 及它们的子目录。

8.1.2 目录“ oycache ”

在本章前面的实例8-2中,如果外部模块文件 module_test.py 和测试文件 but.py 在同一个 目录中,运行成功后会在本目录中生成一个名为“ ycach e ”的文件夹目录,在这个目录 下还有一个名为 “module_test.cpython-36.pyc” 的文件。如图8-3所示。

_pycache_

module

butpy

module_test.py

2019/7/221:29

2019/7/221:29

2018/9/189:42

2018/9/189:42

文件夹

文件夹

Python File

Python File

图8-3

文件 module_test.cpython-36.pyc 是一个可以直接运行的文件,这是Python将文件 module_testpy 编译成字节码后的文件, Python 可以将程序编译成字节码的形式。对于外部 模块文件来说, Python 总是在第一次调用后将其编译成字节码的形式,以提高程序的启动 速度。

Python 程序在导入外部模块文件时会查找模块的字节码文件,如果存在则将编译版后的 模块的修改时间同模块的修改时间进行比较。如果两者的修改时间不同, Python 会重新编译 这个模块,目的是确保两者的内容相符。

在开发Python 程序过程中,如果不想将某个源文件发布,此时可以发布编译后的程序(例 如上面的文件 module_test.cpython-36.pyc), 这样可以起到一定的保护源文件的作用。对于 不作为模块来使用的 Python 程 序 来 说 ,Python 不会在运行脚本后将其编译成字节码的形式。 如果想将其编译,可以使用 compile 模块实现。

例如在下面的实例代码中,将文件 mokuai.py 进行了编译操作。

实例8-3:编译指定的文件

源码路径:下载包\daima\8\8-3

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_1.5 ADO 查询数据的简单例子
下一篇:跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_1.2.4 录制宏的弊端
相关文章

 发表评论

暂时没有评论,来抢沙发吧~