Python训练第三十天

DAY 30 模块和库的导入

知识点回顾:

  1. 导入官方库的三种手段
  2. 导入自定义库/模块的方式
  3. 导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致)

总结:导入包的核心就是找到目录,只有理解了python解释器的目录关系,才能导入包,如果py文件中导入失败,不妨多调试几次路径即可

(一)导入官方库

所谓学习python就是学习python常见的基础语法+学习你所处理任务需要用到的第三方库:

标准导入- 导入整个库

复制代码
import math
print("方式1:使用 import math")
print(f"圆周率π的值:{math.pi}")
print(f"2的平方根:{math.sqrt(2)}\n")
  • 从库中导入特定项

当使用from语法从库中导入特定的函数或类时,这些函数或类就可以在代码中直接使用,不需要添加模块名作为前缀。因为在导入时没有包括模块的完整路径,前面也不能加上库名

复制代码
from math import pi, sqrt
 
print("方式2:使用 from math import pi, sqrt")
print(f"圆周率π的值:{pi}")
print(f"2的平方根:{sqrt(2)}\n")
  • 非标准导入-整个库

import math和 from math import *的区别:使用from math import *代码尽管导入之后可以不使用前缀math.,但容易造成命名空间的污染和减少明确性,很难判断一个特定的函数是来自 `math` 模块还是其他模块

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

(二)模块和包的定义

模块(Module):

本质:以 .py 结尾的单个文件,包含Python代码(函数、类、变量等)。

作用:将代码拆分到不同文件中,避免代码冗余,方便复用和维护。

包(Package)在python里,包就是库:

本质:有层次的文件目录结构(即文件夹),用于组织多个模块和子包。

核心特征:包的根目录下必须包含一个 init.py 文件(可以为空),用于标识该目录是一个包。

①场景: main.py 在根目录,circle.py 在子目录 model/

目录结构:

复制代码
项目根目录/
├── main.py
└── model/
    ├── __init__.py   (必需添加,将 model 目录标记为一个可导入的包)
    └── circle.py

项目根目录/

├── circle2.py

└── utils/

├── init.py (必需添加,将 model 目录标记为一个可导入的包)

└── circle.py

└── model/

└── main.py

复制代码
运行方式
python -m model.main
 
 
如果直接使用python model/main.py,会报错,
当使用 python -m model.main 时,Python 会将当前目录(即项目根目录)添加到 sys.path 的开头

(三)源代码的查看

如果第三方库是纯python写的,往往在函数上按住ctrl即可进入函数内部查看源代码。但是很多第三方库为了性能,底层是用其他语言写的,这里我们计算机视觉库OpenCV为例。

OpenCV核心是用C++编写的(C++可以显著提高性能),但它通过Python等其他语言的接口(bindings)使得这些功能可以在Python环境中被调用。这些接口是通过一种叫做Python/C API的技术实现的,其中C++的功能被封装成Python模块,使得Python用户可以像使用纯Python编写的库一样使用OpenCV。OpenCV的核心是用C++编写,并且已经编译成二进制文件,编译后的二进制文件可以在不同操作系统上运行,Python中的用户通常不能直接看到方法的源代码。

尽管在Python中不能直接看到C++的源代码实现,用户可以参考官方文档来了解各个函数和方法的用法。如果需要查看实现细节,可以访问OpenCV的GitHub仓库(https://github.com/opencv/opencv)查看C++源代码。

@浙大疏锦行

相关推荐
SelectDB8 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
荣码16 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵1 天前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li1 天前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸1 天前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学1 天前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田2 天前
Pydantic校验配置文件
python
hboot2 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi3 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi3 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab