Python模块与包:核心区别与调用技巧

Python模块与包的区别及调用方法

一、核心概念区别
特性模块(Module)包(Package)
本质单个.py文件包含__init__.py的目录
作用封装函数/类/变量组织多个模块的容器
导入语法import moduleimport package.module
典型结构utils.pymypackage/__init__.py + module1.py

关键点:所有包都是模块,但并非所有模块都是包。包通过__init__.py标识为Python包(Python 3.3+可省略,但推荐保留)。


二、调用方法详解
1. 模块调用
# 导入整个模块
import math
print(math.sqrt(16))  # 输出: 4.0

# 导入特定功能
from datetime import date
today = date.today()

2. 包调用
# 假设包结构:
# my_package/
#   __init__.py
#   string_utils.py

# 方式1: 完整路径导入
import my_package.string_utils
my_package.string_utils.reverse_str("Python")

# 方式2: 从包导入模块
from my_package import string_utils
string_utils.capitalize_words("hello world")

# 方式3: 直接导入功能
from my_package.string_utils import reverse_str
reverse_str("Stack")

3. init.py 妙用
# __init__.py 中预先导入模块
# 文件内容:
from . import string_utils, math_tools

# 主程序可直接调用
import my_package
my_package.string_utils.some_function()


三、最佳实践
  1. 避免循环导入
    模块A导入模块B,同时模块B导入模块A会导致错误

  2. 别名管理

    import numpy as np
    import pandas as pd
    

  3. 相对导入(包内部使用)

    # 在包内模块中使用
    from . import helper_module
    from ..subpackage import core
    

  4. 动态导入

    module_name = "json"
    json_module = __import__(module_name)
    


四:练习示例

创建以下结构:

my_utils/
├── __init__.py
├── math_tools.py
└── text_processor.py

math_tools.py 内容

def circle_area(radius):
    return 3.14 * radius ** 2

text_processor.py 内容

def count_words(text):
    return len(text.split())

调用演示

from my_utils import math_tools, text_processor

print(f"圆面积: {math_tools.circle_area(5)}")  # 输出: 圆面积: 78.5
print(f"词数统计: {text_processor.count_words('Python 真强大')}")  # 输出: 词数统计: 3

提示:使用sys.path.append()可临时添加模块搜索路径,生产环境建议使用虚拟环境管理依赖。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值