Python3 模块

Python3 模块(Modules)


🎯 学习目标

掌握 Python 模块的基本概念、定义方式与使用方法,理解模块在代码组织、复用和项目结构设计中的核心作用。能够在实际开发中合理划分模块、导入标准库或第三方模块,并遵循最佳实践进行模块化编程。


🔑 核心重点

分类 内容
基本概念 模块是一个 .py 文件,可被其他程序导入并复用
导入方式 使用 import module_namefrom module import name
搜索路径 Python 解释器查找模块的路径顺序:当前目录 → PYTHONPATH → 标准库路径
实际应用场景 代码解耦、功能封装、项目结构清晰化、协作开发
性能优化 避免重复导入;使用 __all__ 控制公开接口

📚 详细讲解

一、什么是模块?

模块是组织 Python 代码的基本单位,每个 .py 文件就是一个模块。模块可以包含函数、类、变量等,便于代码复用和维护。

✅ 示例:

创建文件 math_utils.py

# math_utils.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

另一个文件中导入使用它:

# main.py
import math_utils

result = math_utils.add(3, 5)
print(result)  # 输出 8

二、模块导入语法详解

1. 基础导入

import module_name

使用时需加模块名前缀:

module_name.function()

2. 导入特定对象

from module import function, variable, class

使用时不需加前缀:

function()

3. 导入全部内容(慎用)

from module import *

📌 不推荐使用,容易造成命名冲突。

4. 别名导入

import module as m
from module import function as func

三、模块搜索路径

当执行 import module 时,Python 解释器会按照以下顺序查找模块:

  1. 当前运行脚本所在目录
  2. 环境变量 PYTHONPATH 中指定的目录
  3. Python 安装的标准库路径
  4. 第三方包安装路径(如 site-packages

✅ 查看当前模块搜索路径:

import sys
print(sys.path)

四、__init__.py 文件的作用

在 Python 包中,__init__.py 是一个标识该目录为包的关键文件(即使为空)。

✅ 示例目录结构:

my_package/
├── __init__.py
├── module_a.py
└── module_b.py

在外部导入:

import my_package.module_a

你还可以在 __init__.py 中预加载子模块:

# my_package/__init__.py
from .module_a import func_a
from .module_b import func_b

这样就可以直接导入包:

from my_package import func_a

五、模块的重新加载

默认情况下,模块只会在首次导入时执行一次。如果想重新加载已修改的模块,可以使用 importlib.reload()

✅ 示例:

import my_module
import importlib

importlib.reload(my_module)

📌 注意:重载不会影响已经从模块中导入的对象。


六、模块属性:__name____main__

每个模块都有一个内置变量 __name__,表示模块的名字。当模块作为主程序运行时,其值为 '__main__'

✅ 示例:

# hello.py
def say_hello():
    print("Hello")

if __name__ == "__main__":
    say_hello()

📌 如果作为脚本运行,则输出 Hello;如果被导入则不执行。


⚠️ 注意事项

  • 避免循环导入(A 导入 B,B 又导入 A)
  • 模块名应小写,避免与标准库模块同名
  • 尽量使用显式导入(import package.module)而非隐式
  • 模块应职责单一,功能明确
  • 使用 __all__ 明确导出哪些名称(用于 from module import *

🧪 实际案例分析

📌 场景:构建一个模块化的天气查询系统

目录结构:

weather_app/
├── __init__.py
├── api.py           # 调用天气 API
├── utils.py         # 工具函数
├── config.py        # 配置信息
└── main.py          # 主程序入口

各模块内容示例:

# config.py
API_KEY = "your_api_key_here"
BASE_URL = "https://api.weather.com/data"

# utils.py
def format_temp(temp):
    return f"{temp}°C"

# api.py
import requests
from config import BASE_URL, API_KEY

def get_weather(city):
    url = f"{BASE_URL}?city={city}&key={API_KEY}"
    response = requests.get(url).json()
    return response

# main.py
from api import get_weather
from utils import format_temp

city = input("请输入城市名称:")
data = get_weather(city)
print(f"温度:{format_temp(data['temperature'])}")

📌 优势:

  • 结构清晰,易于维护
  • 功能模块分离,便于测试
  • 支持多人协作开发

🧩 拓展练习(动手实践)

  1. 创建一个名为 string_utils.py 的模块,实现字符串反转、去空格、统计字符等功能。
  2. 编写一个 calculator.py 模块,提供加减乘除函数,并在 main.py 中调用。
  3. 设计一个包结构,包含多个模块,并通过 __init__.py 导出常用函数。
  4. 使用 importlib.reload() 观察模块热加载效果。
  5. 编写一个模块,在其中定义常量、函数和类,并限制 from module import * 时只能导入部分功能。

📚 推荐阅读


🧭 下一步建议

  • 下一章学习内容:《Python3 包与发布》
  • 掌握如何将多个模块组织成包
  • 学习使用 setuptools 构建分发包
  • 探索上传到 PyPI 并分享你的模块
  • 结合依赖管理知识,构建完整可发布的 Python 项目

如果你希望我为你提供:

  • Python 模块速查表 PDF(含导入方式+结构图)
  • 更多实战项目练习题(如构建自己的工具包、模拟模块热加载等)
  • 模块高级技巧详解(如动态导入、相对导入、模块缓存等)
  • 视频教学资源推荐(中文讲解)

欢迎随时告诉我 😊

posted @ 2025-05-29 09:31  红尘过客2022  阅读(37)  评论(0)    收藏  举报