Python入门(7):模块

目录

[1. 模块的基本概念](#1. 模块的基本概念)

[2. 导入模块的方式](#2. 导入模块的方式)

[2.1 基本导入](#2.1 基本导入)

[2.2 导入特定内容](#2.2 导入特定内容)

[2.3 导入所有内容](#2.3 导入所有内容)

[2.4 给模块或导入项起别名](#2.4 给模块或导入项起别名)

[3. 模块的搜索路径](#3. 模块的搜索路径)

[4. 标准库模块](#4. 标准库模块)

[5. 包(Package)](#5. 包(Package))

[6. __name__属性](#6. __name__属性)

[7. 模块重载](#7. 模块重载)

[8. 模块文档和帮助](#8. 模块文档和帮助)

[9. 创建可执行模块](#9. 创建可执行模块)

[10. 第三方模块的安装和使用](#10. 第三方模块的安装和使用)

[11. 模块的缓存](#11. 模块的缓存)

[12. 模块的最佳实践](#12. 模块的最佳实践)


1. 模块的基本概念

模块(Module):一个包含Python代码的.py文件,可以包含函数、类和变量的定义,以及可执行的代码。模块可以被其他程序导入使用,实现代码复用。

python 复制代码
# 示例:创建一个名为my_module.py的模块
# my_module.py内容:
def greet(name):
    """打招呼的函数"""
    print(f"Hello, {name}!")

version = "1.0"

2. 导入模块的方式

2.1 基本导入

python 复制代码
# 导入整个模块
import my_module  # 导入my_module.py

my_module.greet("Alice")  # 使用模块中的函数
print(my_module.version)  # 使用模块中的变量

2.2 导入特定内容

python 复制代码
# 从模块导入特定函数/变量
from my_module import greet, version

greet("Bob")  # 直接使用导入的函数
print(version)  # 直接使用导入的变量

2.3 导入所有内容

python 复制代码
# 导入模块中的所有内容(不推荐,可能导致命名冲突)
from my_module import *

greet("Charlie")
print(version)

2.4 给模块或导入项起别名

python 复制代码
# 给模块起别名
import my_module as mm

mm.greet("David")

# 给导入项起别名
from my_module import greet as say_hello

say_hello("Eve")

3. 模块的搜索路径

Python解释器按照以下顺序搜索模块:

  1. 当前目录

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

  3. Python安装目录的标准库

  4. 第三方库安装目录(site-packages)

python 复制代码
# 查看模块搜索路径
import sys
print(sys.path)  # 打印Python模块搜索路径

4. 标准库模块

Python自带的标准库提供了丰富的模块:

python 复制代码
# 数学运算模块
import math
print(math.sqrt(16))  # 4.0

# 随机数模块
import random
print(random.randint(1, 10))  # 生成1-10的随机整数

# 日期时间模块
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))  # 格式化输出当前时间

5. 包(Package)

:包含多个模块的目录,必须包含一个**__init__.py**文件(可以为空),用于组织相关模块。

python 复制代码
my_package/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py
python 复制代码
# 导入包中的模块
import my_package.module1
from my_package.subpackage import module3

# 从包中导入特定内容
from my_package.module2 import some_function

6. __name__属性

每个模块都有一个__name__属性:

  • 当模块被直接运行时,__name__等于"main"

  • 当模块被导入时,__name__等于模块名

python 复制代码
# 在my_module.py中添加:
if __name__ == "__main__":
    print("模块被直接运行")
else:
    print("模块被导入")

7. 模块重载

默认情况下,模块只会在第一次导入时执行,可以使用importlib重新加载模块:

python 复制代码
import importlib
import my_module

# 修改my_module.py后...
importlib.reload(my_module)  # 重新加载模块

8. 模块文档和帮助

python 复制代码
# 查看模块文档字符串
print(math.__doc__)

# 使用help函数查看帮助
help(math.sqrt)

9. 创建可执行模块

python 复制代码
# 在模块中添加可执行代码
def main():
    print("这是模块的主程序")

if __name__ == "__main__":
    main()  # 当模块被直接运行时执行

10. 第三方模块的安装和使用

python 复制代码
# 使用pip安装第三方模块
# 命令行执行: pip install requests

# 使用第三方模块
import requests
response = requests.get("https://www.example.com")
print(response.status_code)  # 200

11. 模块的缓存

Python会缓存导入的模块,存储在__pycache__目录中,以.pyc为扩展名,提高后续导入速度。

12. 模块的最佳实践

  1. 模块命名应简短、全小写,必要时使用下划线

  2. 每个模块应有文档字符串说明其功能

  3. 避免循环导入

  4. 在模块中合理使用if __name__ == "__main__":

  5. 将相关功能组织在同一个包中

如果您觉得本文章对您有帮助,别忘了点赞、收藏加关注,更多干货内容将持续发布,您的支持就是作者更新最大的动力。本专栏将持续更新,有任何问题都可以在评论区讨论

相关推荐
shykevin1 小时前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
漫路在线2 小时前
JS逆向-某易云音乐下载器
开发语言·javascript·爬虫·python
成功人chen某4 小时前
配置VScodePython环境Python was not found;
开发语言·python
2301_786964365 小时前
EXCEL Python 实现绘制柱状线型组合图和树状图(包含数据透视表)
python·microsoft·excel
skd89995 小时前
小蜗牛拨号助手用户使用手册
python
「QT(C++)开发工程师」5 小时前
STM32 | FreeRTOS 递归信号量
python·stm32·嵌入式硬件
史迪仔01125 小时前
[python] Python单例模式:__new__与线程安全解析
开发语言·python·单例模式
胡耀超5 小时前
18.自动化生成知识图谱的多维度质量评估方法论
人工智能·python·自动化·知识图谱·数据科学·逻辑学·质量评估
三块钱07946 小时前
【原创】基于视觉大模型gemma-3-4b实现短视频自动识别内容并生成解说文案
开发语言·python·音视频
神码小Z6 小时前
Ubuntu快速安装Python3.11及多版本管理
python