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

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, sqrtprint("方式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++源代码。

@浙大疏锦行

相关文章:

  • mybtais plus使用拦截器打印完整SQL语句
  • 深入探讨死区生成:原理、实现与应用
  • MIMO 检测(6)--最大似然检测(1)
  • 基于SpringBoot的小型民营加油站管理系统
  • 2025年—ComfyUI_关于ComfyUI的零碎小知识
  • unity UGUI虚线框shader
  • C++--综合应用-演讲比赛项目
  • 10、底层注解-@Conditional条件装配
  • python可视化:公积金与商业贷款利率历年趋势1
  • 客户体验数据使用的三种视角——旅程视角
  • 升级mysql (rpm安装)
  • 【java第14集】java访问修饰符详解
  • HashMap 的特点及应用场景
  • 洛谷B3876—— [信息与未来 2015] 中间值
  • Java知识点-Stream流
  • UE5在Blueprint中判断不同平台
  • MySQL如何快速删除数据库中所有表数据
  • PyMOL结构对齐方式
  • 【深度学习新浪潮】什么是多模态大模型?
  • 列表 模版题单 12
  • 财政部:鼓励政策性银行对符合条件的城市更新项目提供支持
  • 沧州盐碱地“逆天改命”:无用之地变良田,候鸟翔集水草丰美
  • 旅马大熊猫“福娃”“凤仪”平安回国
  • 茅台总经理到访五粮液:面对白酒行业周期性调整,需要团结一心的合力
  • 蒲慕明院士:未来数十年不是AI取代人,而是会用AI的人取代不会用的
  • 马上评|科学红毯,让科学家成为“最亮的星”