Skip to Content
《学习 Python》第 5 版
book

《学习 Python》第 5 版

by Mark Lutz
May 2025
Intermediate to advanced
1648 pages
23h 5m
Chinese
O'Reilly Media, Inc.
Content preview from 《学习 Python》第 5 版

第 22 章 模块 模块:全貌

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

本章开始深入了解 Python模块--最高级别的程序组织单元,它将程序代码和数据打包以便重复使用,并提供自足的命名空间,最大限度地减少程序中的变量名冲突。具体来说,模块通常对应于 Python 程序文件。每个文件都是一个模块,模块导入其他模块以使用它们定义的名称。模块也可能对应于用 C、Java 或 C# 等外部语言编码的扩展,甚至是包导入中的目录。模块由两条语句和一个重要函数处理:

import

让客户端(导入器)获取模块的整体内容

from

允许客户端从模块中获取特定的名称

imp.reload ( in 2.X)reload

提供了一种无需停止 Python 就能重新加载模块代码的方法

第 3 章介绍了模块的基本原理,从那时起我们就一直在使用它们。这里的目标是扩展你已经熟悉的核心模块概念,并继续探索更高级的模块用法。第一章回顾了模块基础知识,并概述了模块在整个程序结构中的作用。在接下来的章节中,我们将深入探讨理论背后的编码细节。

在学习过程中,我们将充实迄今为止遗漏的模块细节--你将了解重载、__name____all__ 属性、包导入、相对导入语法、3.3 命名空间包等等。因为模块和类实际上就是美化了的命名空间,所以我们还将在这里正式介绍命名空间的概念。

为什么使用模块?

简而言之,模块提供了一种将组件组织到系统中的简便方法,它是被称为命名空间的自足变量包。所有在模块文件顶层定义的名称都会成为导入模块对象的属性。正如我们在本书最后一部分所看到的,导入可以访问模块全局范围内的名称。也就是说,当模块对象被导入时,模块文件的全局作用域就变成模块对象的属性名称空间。最终,Python 的模块允许我们将单个文件连接到一个更大的程序系统中。

更具体地说,模块至少有三种作用:

代码重复使用

正如第 3 章中所讨论的,模块可以让您将代码永久保存在文件中。在 Python 交互提示符下输入的代码会在退出 Python 时消失,而模块文件中的代码则不同--它可以根据需要多次重新加载和运行。同样重要的是,模块是定义名称(称为属性)的地方,这些名称可能被多个外部客户端引用。如果使用得当,模块可支持模块化程序设计,将功能归类为可重复使用的单元。

系统命名空间分区

模块也是 Python 中最高级别的程序组织单元。虽然从根本上说,它们只是名称的包,但这些包也是自包含--你永远看不到另一个文件中的名称,除非你显式地导入该文件。就像函数的本地作用域一样,这有助于避免程序中的名称冲突。事实上,你无法回避这一特性--所有东西都 "生活 "在模块中,你运行的代码和创建的对象都隐含在模块中。 正因为如此,模块是组合系统组件的天然工具。

实施共享服务或数据

从操作的角度来看,模块还有助于实现在整个系统中共享的组件,因此只需要一个副本。例如,如果你需要提供一个全局对象,而这个对象被多个函数或文件使用,你可以将其编码在一个模块中,然后由多个客户端导入。

至少这是一个抽象的故事--要想真正理解模块在 Python 系统中的作用,我们需要暂时离题,探讨一下 Python程序的一般结构。

Python 程序结构

到目前为止,在本书中,,我在描述 Python 程序时已经把一些复杂性糖衣化了。实际上,程序通常不止涉及一个文件。除了最简单的脚本外,您的程序都将采用多文件系统的形式--上一章的代码计时程序就说明了这一点。即使你可以自己编写一个文件,你也几乎肯定会使用别人已经编写好的外部文件。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

学习 Java,第 6 版

学习 Java,第 6 版

Marc Loy, Patrick Niemeyer, Daniel Leuck
《高性能 Python》第二版

《高性能 Python》第二版

Micha Gorelick, Ian Ozsvald

Publisher Resources

ISBN: 9798341656963