第43集:自定义模块
学习目标
- 理解如何创建自定义模块
- 掌握模块的组织结构
- 学会在模块中定义函数、类、变量
- 理解__name__ == "main"的作用
- 掌握模块的导入和使用
一、创建自定义模块
基本步骤
- 创建一个
.py文件 - 在文件中定义函数、类、变量
- 在其他程序中导入使用
示例1:简单的自定义模块
# mymodule.py
"""这是我的第一个自定义模块"""
# 模块级变量
version = "1.0.0"
author = "Python学习者"
# 函数
def greet(name):
"""问候函数"""
return f"你好,{name}!"
def add(a, b):
"""加法函数"""
return a + b
# 类
class Calculator:
"""计算器类"""
def __init__(self):
self.value = 0
def add(self, num):
self.value += num
return self.value使用自定义模块
# main.py
import mymodule
# 使用模块变量
print(f"模块版本:{mymodule.version}")
print(f"模块作者:{mymodule.author}")
# 使用模块函数
print(mymodule.greet("小明"))
print(mymodule.add(5, 3))
# 使用模块类
calc = mymodule.Calculator()
print(calc.add(10))二、模块的组织结构
示例2:模块文档和注释
# utils.py
"""
工具函数模块
提供常用的工具函数,包括字符串处理、数学计算等功能。
"""
__version__ = "1.0.0"
__author__ = "Python学习者"
def reverse_string(s):
"""反转字符串"""
return s[::-1]
def is_palindrome(s):
"""判断是否是回文"""
return s == s[::-1]
def calculate_average(numbers):
"""计算平均值"""
if not numbers:
return 0
return sum(numbers) / len(numbers)示例3:模块的__name__属性
# mymodule.py
def main():
"""模块的主函数"""
print("模块作为程序运行")
print("执行一些操作...")
# 只有直接运行模块时才执行
if __name__ == "__main__":
main()
else:
print("模块被导入,不执行main()")三、模块导入的最佳实践
实践1:合理组织模块
project/
├── main.py # 主程序
├── utils/ # 工具包
│ ├── __init__.py
│ ├── string.py
│ ├── math.py
│ └── file.py
└── config.py # 配置模块实践2:避免循环导入
# ❌ 错误:循环导入
# module_a.py
# import module_b
# module_b.py
# import module_a
# ✅ 正确:重构代码结构四、课后练习
练习1
创建一个math_tools.py模块,包含常用的数学计算函数。
练习2
创建一个string_tools.py模块,包含字符串处理函数。
练习3
使用__name__ == "main"让你的模块既可以导入也可以直接运行。
练习4
创建一个配置模块,存储程序的配置信息。
练习5
组织多个相关模块到一个包中。