当前位置: 代码网 > it编程>前端脚本>Python > Python自定义模块的创建与调用方法

Python自定义模块的创建与调用方法

2026年08月03日 Python 我要评论
一、开篇:写一个自己的模块好消息是:创建一个模块就是创建一个.py文件——没有复杂的配置,没有特殊的语法。来吧,从一个简单的工具模块开始:# 创建一个文件:utils.py#

一、开篇:写一个自己的模块

好消息是:创建一个模块就是创建一个.py文件——没有复杂的配置,没有特殊的语法。

来吧,从一个简单的工具模块开始:

# 创建一个文件:utils.py
# 这就是一个模块!

# utils.py 内容:
"""
通用工具函数模块(utils)

提供常用的辅助函数:数据验证、格式化、字符串处理等。
"""

def read_number(prompt="请输入数字: "):
    """读取用户输入的数字(带错误处理)"""
    while true:
        try:
            return float(input(prompt))
        except valueerror:
            print("输入无效,请输入一个数字。")

def clamp(value, min_val, max_val):
    """将值限定在[min_val, max_val]范围内"""
    return max(min_val, min(value, max_val))

def truncate(text, max_length, suffix="..."):
    """截断文本到指定长度"""
    if len(text) <= max_length:
        return text
    return text[:max_length - len(suffix)] + suffix

# 使用(在同一个文件或另一个.py文件中):
# import utils
# age = utils.read_number("请输入年龄: ")
# score = utils.clamp(age, 0, 150)

创建自定义模块就是如此简单。但真正的艺术在于组织模块:把什么放在一起、怎么命名、怎么处理模块级别的可执行代码,以及如何让模块既可以直接运行又可以被导入。

二、创建自定义模块

2.1 基本创建和导入

# 假设当前目录结构:
# my_project/
# ├── main.py
# └── calculator.py  ← 我们要创建的模块

# ===== calculator.py =====
"""计算器模块——提供基本数学运算"""

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

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

def divide(a, b):
    if b == 0:
        raise valueerror("除数不能为零")
    return a / b

def power(base, exp):
    return base ** exp

# 模块级常量
pi = 3.141592653589793
e = 2.718281828459045

# ===== main.py =====
import calculator

print(calculator.add(10, 5))       # 15
print(calculator.divide(10, 3))    # 3.3333333333333335
print(calculator.pi)               # 3.141592653589793

2.2 模块文件命名规则

# ⚠️ 模块命名注意事项:

# 1. 不能和python内置模块重名
# ❌ 不要创建:math.py、random.py、json.py、os.py
# 这会"遮蔽"标准库的同名模块!

# 2. 不能和已安装的第三方库重名
# ❌ 如果装了requests库,不要创建 requests.py

# 3. 使用小写字母和下划线(pep 8)
# ✅ utils.py, data_processor.py, email_service.py
# ❌ utils.py, dataprocessor.py, email-service.py

# 4. 避免使用python关键字
# ❌ class.py, import.py, from.py, if.py

# 5. 使用有意义的名字
# ✅ user_manager.py
# ❌ um.py, stuff.py, temp.py

2.3 模块中的可执行代码

# ⚠️ 注意:导入模块时,模块中的所有顶层代码都会执行!

# ===== demo_module.py =====
print("模块被加载了!")  # ← 这行会在import时执行!

name = "demo_module"
version = "1.0.0"

class demo:
    """示例类"""
    pass

def greet():
    print(f"hello from {name}!")

# ✅ 好的做法:只在模块中定义(无副作用的顶层代码)
# ❌ 坏的做法:在模块顶层执行有副作用的操作

# 示例:一个模块的顶层代码对比
# 好的模块
"""
连接配置和工具函数
"""
database_url = "postgresql://localhost/mydb"

def connect():
    """连接到数据库"""
    pass

# 坏的模块
"""
这个模块在导入时就连接数据库——不好!
"""
# db = connect()  # 先注释掉——每次import都连接数据库!浪费且不可控
# data = load_all_data()  # 同样的问题

三、模块的组织和最佳实践

3.1 功能相关的代码放在同一个模块

# ✅ 好的组织
# user_service.py     —— 用户相关的所有业务逻辑
# email_utils.py      —— 邮件发送相关的工具函数
# validators.py       —— 数据验证函数集合
# config.py           —— 应用配置常量

# ❌ 不好的组织
# everything.py       —— 所有函数混在一起
# helpers.py          —— "杂项"模块(当文件名就是"各种帮助函数"时,往往意味着缺乏组织)

3.2 实战:创建一组项目模块

# 项目结构:
# my_project/
# ├── main.py
# ├── validators.py    —— 数据验证
# ├── formatters.py    —— 格式化输出
# └── converters.py    —— 数据转换

# ===== validators.py =====
"""数据验证模块"""

import re

def is_valid_email(email):
    """验证邮箱格式"""
    pattern = r'^[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\.[a-za-z]{2,}$'
    return bool(re.match(pattern, email))

def is_valid_phone(phone):
    """验证手机号(中国)"""
    pattern = r'^1[3-9]\d{9}$'
    return bool(re.match(pattern, phone))

def is_strong_password(password):
    """验证密码强度:至少8位,包含字母和数字"""
    return (
        len(password) >= 8
        and any(c.isalpha() for c in password)
        and any(c.isdigit() for c in password)
    )

# ===== formatters.py =====
"""格式化输出模块"""

def format_currency(amount, symbol="¥"):
    """格式化金额"""
    return f"{symbol}{amount:,.2f}"

def format_percent(value, decimals=1):
    """格式化百分比"""
    return f"{value * 100:.{decimals}f}%"

def format_table(headers, rows, col_widths=none):
    """格式化表格"""
    if col_widths is none:
        col_widths = [max(len(str(row[i])) for row in [headers] + rows)
                      for i in range(len(headers))]

    lines = [" | ".join(str(h).ljust(w) for h, w in zip(headers, col_widths))]
    lines.append("-+-".join("-" * w for w in col_widths))
    for row in rows:
        lines.append(" | ".join(str(c).ljust(w) for c, w in zip(row, col_widths)))
    return "\n".join(lines)

# ===== main.py =====
import validators
import formatters

# 使用
print(validators.is_valid_email("test@example.com"))  # true
print(validators.is_strong_password("abc12345"))       # true

headers = ["姓名", "年龄", "城市"]
rows = [("张三", "25", "北京"), ("李四", "30", "上海")]
print(formatters.format_table(headers, rows))

四、总结

创建自定义模块就是把代码组织到.py文件中——简单自然。好的模块组织让项目结构清晰,代码复用变得轻松。

核心要点:

  1. 一个.py文件 = 一个模块——没有特殊语法
  2. 命名要规范——小写+下划线,不跟标准库冲突
  3. 警惕顶层可执行代码——import时会执行,避免副作用
  4. 功能相关放一起——一个模块一个明确职责
  5. 模块文档——模块的docstring说明模块的用途

模块化思维:当你发现自己在不同文件中复制粘贴同样的函数时,就该把它提取到独立模块中了。

以上就是python自定义模块的创建与调用方法的详细内容,更多关于python自定义模块创建与调用的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com