Python模块与包的区别及调用方法
一、核心概念区别
| 特性 | 模块(Module) | 包(Package) |
|---|---|---|
| 本质 | 单个.py文件 | 包含__init__.py的目录 |
| 作用 | 封装函数/类/变量 | 组织多个模块的容器 |
| 导入语法 | import module | import package.module |
| 典型结构 | utils.py | mypackage/__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()
三、最佳实践
-
避免循环导入
模块A导入模块B,同时模块B导入模块A会导致错误 -
别名管理
import numpy as np import pandas as pd -
相对导入(包内部使用)
# 在包内模块中使用 from . import helper_module from ..subpackage import core -
动态导入
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()可临时添加模块搜索路径,生产环境建议使用虚拟环境管理依赖。

被折叠的 条评论
为什么被折叠?



