Skip to Content
《Python 概论》,第 4 版
book

《Python 概论》,第 4 版

by Alex Martelli, Anna Martelli Ravenscroft, Steve Holden, Paul McGuire
May 2025
Intermediate to advanced
738 pages
9h 28m
Chinese
O'Reilly Media, Inc.
Content preview from 《Python 概论》,第 4 版

第 7 章 模块和软件包 模块和软件包

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

典型的 Python 程序由多个源文件组成。每个源文件都是一个模块,将代码和数据分组以便重复使用。模块通常是相互独立的,因此其他程序可以重用它们需要的特定模块。有时,为了管理复杂性,开发者会将相关模块组合成一个 包--一个由相关模块和子包组成的树状分层结构。

模块通过使用importfrom语句明确建立对其他模块的依赖关系。在某些编程语言中,全局变量为模块间的耦合提供了一个隐蔽的渠道。在 Python 中,全局变量不是所有模块的全局变量,而是单个模块对象的属性。因此,Python 模块总是以显式和可维护的方式进行通信,通过显式方式明确模块之间的耦合。

Python 还支持扩展模块--用 C、C++、Java、C# 或 Rust 等其他语言编码的模块。对于导入模块的 Python 代码来说,模块是纯 Python 还是扩展模块并不重要。您可以随时从用 Python 编写模块开始。如果以后需要更快的速度,可以用低级语言重构和重新编码模块的某些部分,而不改变使用模块的客户端代码。第 25 章(可在线获取)介绍了如何用 C 和Cython 编写扩展。

本章讨论模块的创建和加载。本章还讨论了将模块分组为包、使用setuptools安装包,以及如何为发布包做准备;后一个主题在第 24 章(也可在线获取)中有更详尽的讨论。本章最后讨论了如何最好地管理 Python环境

模块对象

在 Python 中,模块是一个具有任意命名属性的对象,您可以绑定和引用它。Python 中模块的处理方式与其他对象类似。因此,您可以在函数调用中将模块作为参数传递。同样,函数也可以将模块作为调用结果返回。模块与其他对象一样,可以绑定到变量、容器中的项目或对象的属性。模块可以是字典中的键或值,也可以是集合的成员。例如,"模块加载 "一节中讨论的sys.modules字典就将模块对象作为其值。在 Python 中,模块可以像其他值一样被处理,这一点通常用 "模块是头等对象 "来表达。

进口声明

名为aname的模块的 Python 代码通常保存在名为aname.py 的文件中,这在"搜索文件系统中的模块 "中有所介绍。您可以将任何 Python 源文件1import的语法如下:

import modname [as varname][,...]

import关键字之后是一个或多个用逗号分隔的模块指定符。在最简单、最常见的情况下,模块指定符就是modname,一个标识符--当导入语句结束时,Python 将其绑定到模块对象的变量。在这种情况下,Python 会查找同名的模块来满足导入请求。例如,这条语句

import mymodule

查找名为mymodule的模块,并将当前作用域中名为mymodule的变量与模块对象绑定。modname也可以是由 点 (.) 分隔的标识符序列,用于命名包中包含的模块,详见"包"。

varname 模块指定符的一部分时,Python 会查找名为modname的模块,并将模块对象绑定到变量varname 上。例如

import mymodule as alias

查找名为mymodule的模块,并将模块对象与当前作用域中的变量 别名绑定。

模块主体

模块的主体是模块源文件中的语句序列。表示源文件是模块并不需要特殊的语法;如前所述,您可以使用任何有效的 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

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

Aurélien Géron
ppk on JavaScript

ppk on JavaScript

Peter-Paul Koch

Publisher Resources

ISBN: 9798341656840