当前位置: 首页 > news >正文

Day 30:模块和库的导入

一、Python库的分类与选择

在开始学习导入之前,我们先了解一下Python生态中的主要库类型:

类别典型库解决的问题学习门槛
基础工具ossysjson操作系统交互、序列化数据(如读写 JSON 文件)
科学计算numpyscipy数值计算、线性代数、信号处理
数据分析pandasmatplotlib数据清洗、转换、可视化(如绘制折线图、柱状图)
Web 开发DjangoFlask快速搭建 Web 应用(如网站后台、API 接口)中高
机器学习scikit-learnTensorFlow机器学习算法(分类、回归、深度学习)
自动化脚本pyautoguipytest自动化测试、桌面操作自动化(如模拟鼠标键盘操作)
网络爬虫requestsScrapy从网页提取数据(需注意反爬机制和法律合规)

核心原则:按需学习,用到什么学什么库即可。

二、导入官方库的三种方式

2.1 标准导入:导入整个库

这是最基本也是最常见的导入方式,使用import语句导入整个模块。

# 方式1:导入整个模块
import mathprint("方式1:使用 import math")
print(f"圆周率π的值:{math.pi}")
print(f"2的平方根:{math.sqrt(2)}")

特点

  • 需要使用库名.函数名的方式调用
  • 命名空间清晰,不会造成污染
  • 适合需要使用库中多个功能的场景

2.2 从库中导入特定项

当只需要使用库中的特定函数或变量时,可以使用from...import语法。

# 方式2:导入特定的函数或变量
from math import pi, sqrtprint("方式2:使用 from math import pi, sqrt")
print(f"圆周率π的值:{pi}")
print(f"2的平方根:{sqrt(2)}")

特点

  • 可以直接使用函数名,无需前缀
  • 节省内存,只导入需要的部分
  • 适合大型库如sklearn:from sklearn.model_selection import train_test_split

2.3 导入库中所有内容(不推荐)

使用from...import *可以导入库中所有公开的函数和变量。

from math import *print(f"圆周率π的值:{pi}")
print(f"2的平方根:{sqrt(2)}")

注意事项

  • 命名空间污染:可能与其他库的函数名冲突
  • 可维护性差:难以判断函数来源
  • 一般不推荐使用,除非在交互式环境中快速测试

三、模块与包的概念

3.1 基本定义

模块(Module)

  • 本质:以.py结尾的单个文件,包含Python代码(函数、类、变量等)
  • 作用:将代码拆分到不同文件中,避免代码冗余,方便复用和维护

包(Package)

  • 本质有层次的文件目录结构(即文件夹),用于组织多个模块和子包
  • 核心特征:包的根目录下必须包含一个__init__.py文件(可以为空),用于标识该目录是一个包
  • 注意:在Python中,包就是库

3.2 实际案例

让我们通过一个计算圆面积的例子来理解模块的使用:

创建模块文件 circle.py

# circle.py
import mathdef calculate_area(radius):return math.pi * radius ** 2

四、不同目录结构下的导入方式

理解Python的导入机制核心在于:找到根目录。IDE通常会将项目文件夹设为根目录,Python从这个根目录开始查找模块。

4.1 场景1:同一目录下的导入

目录结构:

项目根目录/
├── main.py
└── circle.py

main.py 内容:

# main.py
from circle import calculate_area
# 或者: import circle (然后用 circle.calculate_area)radius = 5
area = calculate_area(radius)
print(f"半径为 {radius} 的圆,面积是: {area}")

运行方式:

python main.py

4.2 场景2:子目录中的导入

目录结构:

项目根目录/
└── model/├── __init__.py   (推荐添加)├── main.py└── circle.py

model/main.py 内容:

# model/main.py
from circle import calculate_arearadius = 5
area = calculate_area(radius)
print(f"半径为 {radius} 的圆,面积是: {area}")

运行方式:

# 方式1:
python model/main.py# 方式2:
cd model
python main.py

4.3 场景3:跨目录导入

目录结构:

项目根目录/
├── main.py
└── model/├── __init__.py   (必需添加)└── circle.py

main.py 内容:

# main.py
from model.circle import calculate_area
# 或者: from model import circle (然后用 circle.calculate_area)radius = 5
area = calculate_area(radius)
print(f"半径为 {radius} 的圆,面积是: {area}")

运行方式:

python main.py

4.4 场景4:复杂目录结构

目录结构:

项目根目录/
├── circle2.py
├── utils/
│   ├── __init__.py
│   └── circle.py
└── model/└── main.py

运行方式:

python -m model.main

注意:使用python -m model.main而不是python model/main.py,因为前者会将当前目录添加到sys.path的开头。

五、源代码查看与文档学习

5.1 纯Python库

对于纯Python编写的库,可以通过以下方式查看源代码:

  • 在IDE中按住Ctrl点击函数名
  • 使用调试器逐步查看函数内部实现

5.2 C++编写的库(如OpenCV)

许多高性能库(如OpenCV、NumPy等)的核心是用C++编写的:

特点

  • 二进制文件:预先编译好的机器语言,无法直接查看源代码
  • 接口封装:Python中只能看到函数接口,不能看到实现细节
  • 性能优势:C++实现提供更好的性能
  • 知识产权保护:二进制形式保护了源代码

学习策略

  • 查看官方文档:这是最重要的学习资源
  • GitHub仓库:查看开源库的C++源代码
  • API说明书:理解函数参数和返回值

六、知识点回顾

6.1 导入官方库的三种方式

  1. 标准导入import math - 导入整个库,使用时需加前缀
  2. 特定导入from math import pi, sqrt - 只导入需要的部分
  3. 全部导入from math import * - 导入所有内容(不推荐)

6.2 导入自定义库/模块的方式

  • 同目录:直接import 模块名
  • 子目录:需要__init__.py文件,使用包路径导入
  • 跨目录:使用完整的包路径,如from model.circle import function

6.3 导入的核心逻辑

  • 根目录识别:Python从项目根目录开始查找模块
  • 路径问题:注意Python解释器的工作目录与终端目录可能不一致
  • 运行方式:选择合适的运行命令(python file.py vs python -m module.main

@浙大疏锦行

http://www.lryc.cn/news/608708.html

相关文章:

  • 风光储综合能源系统双层优化规划设计【MATLAB模型实现】
  • 第九章:了解特殊场景下的redis
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • Spring 03 Web springMVC
  • ESP32学习-I2C(IIC)通信详解与实践
  • C++:STL中的栈和队列的适配器deque
  • Spring Boot AOP 优雅实现异常重试机制
  • AD方案(OpenLDAP或微软AD)适配信创存在的不足以及可能优化方案
  • Nvidia Orin DK 刷机CUDA TensorRT+硬盘扩容+ROS+Realsense+OpenCV+Ollama+Yolo11 一站式解决方案
  • CUDA杂记--nvcc使用介绍
  • Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry
  • Jupyter Notebook 中高效处理和实时展示来自 OpenCV 和 Pillow 的图像数据探究
  • Jetpack Compose for XR:构建下一代空间UI的完整指南
  • SpringBoot+Vue高校实验室预约管理系统 附带详细运行指导视频
  • 力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)
  • RabbitMQ面试精讲 Day 9:优先级队列与惰性队列
  • 昇思学习营-开发版-模型推理和性能优化
  • Android 之 MVP架构
  • Redis+Lua的分布式限流器
  • Python 实例属性与方法命名冲突:一次隐藏的Bug引发的思考
  • Corrosion2靶机
  • NumPy库学习(三):numpy在人工智能数据处理的具体应用及方法
  • PHP入门及数据类型
  • Android 之 WebView与HTML交互
  • 【Django】-7- 实现注册功能
  • 迈向透明人工智能: 可解释性大语言模型研究综述
  • ubuntu24.04安装selenium、edge、msedgedriver
  • 大语言模型的解码策略:贪婪解码与波束搜索
  • 记一次v-if和key错误使用,导致vue2的内存爆炸修复!
  • 音视频学习(五十):音频无损压缩