当前位置: 首页 > 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.dtcms.com/a/313530.html

相关文章:

  • Git 常用命令指南:从入门到高效开发
  • 数据结构之链表
  • sublime text2配置
  • 设备维护计划制定指南:基于数据驱动的全流程技术实现
  • 接口测试用例的编写
  • solidworks打开step报【警告!可用的窗口资源极低】的解决方法
  • Kubernetes中ingress,egress,slb等概念的含义
  • 电路设计(电容)设计细节
  • 【华为OD机试】从小桶里取球
  • 嵌入式分享合集13
  • io_destroy系统调用及示例
  • 【AI】文档理解
  • 关于assert()函数,eval()函数,include
  • Java中手动床架一个线程池
  • 【OD机试题解法笔记】文件缓存系统
  • 第 10 篇:深度学习的“军火库”——CNN、RNN与Transformer,AI如何看懂世界?
  • pod的创建流程
  • [Linux入门] 从 iptables 到 nftables:初学者入门指南
  • 大数据之路:阿里巴巴大数据实践——元数据与计算管理
  • 【分析学】Hilbert 空间的分离性
  • 分布式事务Seata AT模式设计分析篇
  • 41.安卓逆向2-frida hook技术-过firda检测(五)-利用ida分析app的so文件中frida检测函数过检测
  • 关于Manus AI与多语言手写识别的技术
  • Linux驱动学习(六)一些函数
  • 【canvas】
  • 从WebShell 与 ShellCode 免杀技术 打造适合自己的免杀技术链
  • 设计模式 - 组合模式:用树形结构处理对象之间的复杂关系
  • 攻防世界-web-csaw-mfw
  • 【C++】封装,this指针
  • C++高阶笔记第四篇:STL-函数对象