第43集:自定义模块

学习目标

  • 理解如何创建自定义模块
  • 掌握模块的组织结构
  • 学会在模块中定义函数、类、变量
  • 理解__name__ == "main"的作用
  • 掌握模块的导入和使用

一、创建自定义模块

基本步骤

  1. 创建一个.py文件
  2. 在文件中定义函数、类、变量
  3. 在其他程序中导入使用

示例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

组织多个相关模块到一个包中。

« 上一篇 常用内置模块 下一篇 » 包的概念与使用