八、Python模块、包

发布于:2025-06-06 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

1. 模块

1.1 什么是模块?

1.2 创建模块

1.3 导入模块

1.4 模块的命名空间

1.5 模块的搜索路径

1.6 模块的重新加载

2. 包

2.1 什么是包?

2.2 创建包

2.3 导入包中的模块

2.4 包的层次结构

3. 模块和包的管理

3.1 安装模块

3.2 卸载模块

3.3 列出已安装的模块

4. 模块和包的最佳实践

4.1 模块命名

4.2 包结构

4.3 避免循环导入

4.4使用 __all__ 控制公开接口


1. 模块

1.1 什么是模块?

一个模块是一个包含 Python 定义和语句的文件。模块的文件名以 .py 结尾。通过将代码组织到模块中,可以实现代码的复用和更好的结构化管理。

1.2 创建模块

要创建一个模块,只需在一个文件中编写 Python 代码并保存为 .py 文件。

示例:创建一个模块 mymodule.py

# 定义一个函数
def greet(name):
    print(f"Hello, {name}!")

# 定义一个变量
version = "1.0.0"

# 定义一个类
class Calculator:
    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

1.3 导入模块

可以使用 import 语句导入模块,并使用模块中的函数、变量和类。

示例:导入并使用 mymodule

import mymodule

# 使用模块中的函数
mymodule.greet("Alice")

# 使用模块中的变量
print(mymodule.version)

# 使用模块中的类
calc = mymodule.Calculator()
print(calc.add(5, 3))  # 输出:8

1.4 模块的命名空间

每个模块都有自己的命名空间,这避免了名称冲突。模块中的变量、函数和类不会与导入模块的命名空间冲突。

1.5 模块的搜索路径

当你导入一个模块时,Python 会在以下位置按顺序查找模块:

  1. 当前工作目录。

  2. PYTHONPATH 环境变量指定的目录。

  3. Python 安装目录中的默认路径。

可以通过 sys.path 查看模块搜索路径:

import sys
print(sys.path)

1.6 模块的重新加载

一旦模块被导入,它就不会再次加载。如果需要重新加载模块,可以使用 importlib.reload()

示例:重新加载模块

import importlib
import mymodule

# 修改 mymodule 后重新加载
importlib.reload(mymodule)

2. 

2.1 什么是包?

包是一种包含多个模块的文件夹,用于组织模块的层次结构。包必须包含一个 __init__.py 文件(可以为空),以标识这是一个包。

2.2 创建包

要创建一个包,只需创建一个文件夹,并在其中添加 __init__.py 文件和其他模块文件。

示例:创建包 mypackage

mypackage/
├── __init__.py
├── module1.py
└── module2.py

__init__.py 的内容

# 可以在 __init__.py 中初始化包或定义包级别的变量
print("Package initialized.")

module1.py 的内容

def func1():
    print("Function 1 from module1.")

module2.py 的内容

def func2():
    print("Function 2 from module2.")

2.3 导入包中的模块

可以使用 import 语句导入包中的模块。

示例:导入并使用包中的模块

# 导入整个包
import mypackage

# 导入包中的特定模块
import mypackage.module1
import mypackage.module2

# 使用模块中的函数
mypackage.module1.func1()
mypackage.module2.func2()

或使用 from ... import ... 语法

from mypackage import module1, module2

module1.func1()
module2.func2()

或直接导入函数

from mypackage.module1 import func1
from mypackage.module2 import func2

func1()
func2()

2.4 包的层次结构

可以创建嵌套的包结构,以实现更复杂的层次组织。

示例:创建嵌套包

mypackage/
├── __init__.py
├── submodule/
│   ├── __init__.py
│   ├── submodule1.py
└── module1.py

导入嵌套包中的模块

from mypackage.submodule.submodule1 import func

3. 模块和包的管理

3.1 安装模块

可以使用 pip 安装第三方模块。

示例:安装 requests 模块

pip install requests

3.2 卸载模块

可以使用 pip 卸载已安装的模块。

示例:卸载 requests 模块

pip uninstall requests

3.3 列出已安装的模块

可以使用 pip list 查看已安装的模块。

pip list

4. 模块和包的最佳实践

4.1 模块命名

模块名应简洁明了,避免使用保留字和内置函数名。

4.2 包结构

合理设计包的结构,避免过深的嵌套。包的层次结构应反映项目的逻辑结构。

4.3 避免循环导入

循环导入(即两个模块互相导入)会导致错误,应尽量避免。

4.4使用 __all__ 控制公开接口

可以在模块中定义 __all__ 列表,指定哪些名称会被 from module import * 导入。

示例:定义 __all__

__all__ = ["func1", "func2"]

网站公告

今日签到

点亮在社区的每一天
去签到