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. 将相关功能组织在同一个包中

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

相关推荐
用户277844910499313 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
JavaEdge在掘金15 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程55516 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
老歌老听老掉牙16 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
无名之逆16 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
你觉得20517 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
啊喜拔牙17 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
__lost18 小时前
Pysides6 Python3.10 Qt 画一个时钟
python·qt