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

【Python训练营打卡】day30 @浙大疏锦行

DAY 30 模块和库的导入

知识回顾

1.  导入官方三种手段

2.  导入自定义/模块的方式

3.  导入库/模块的核心逻辑找到根目录(python解释器的目录和终端的目录不一致)

作业自己新建几个不同路径文件尝试下如何导入

场景一:

main.py和 rectangle.py都在同一目录

目录结构:

项目根目录

├── main.py

└── rectangle.py

运行方案:直接在终端python main.py

# rectangle.py
import mathdef calculate_area(length, width):return length * width
# main.py
from circle import calculate_arearadius = 5
area = calculate_area(radius)
print(f"半径为 {radius} 的圆,面积是: {area}")# 或者注释上面的,用下面的方法
# import circle 
# radius = 5
# area = circle.calculate_area(radius)
# print(f"半径为 {radius} 的圆,面积是: {area}")

尝试在终端上运行python main.py

场景2:

main.py和 rectangle.py都在根目录的子目录 model下

目录结构:

项目根目录

└── model

    ├── __init__.py   (推荐添加,将 model 目录标记为包)

    ├── main.py

    └── rectangle.py

运行方案:

1. 运行命令:python model/main.py

2. 进入路径:cd xxx(main的相对路径),然后执行python main.py

(注意如果先cd后,就不能采用第一个命令了)

# rectangle.py
import mathdef calculate_area(length, width):return length * width
# main.py
from circle import calculate_arearadius = 5
area = calculate_area(radius)
print(f"半径为 {radius} 的圆,面积是: {area}")

场景3:

main.py在根目录rectangle.py在子目录model下

目录结构:

项目根目录

├── main.py

└── model

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

    └── rectangle.py

运行方案:直接在终端python main.py

import mathdef calculate_area(length, width):return length * width
from model.rectangle import calculate_area #注意是model.rectanglewidth = 4
length = 6
area = calculate_area(width, length)
print(f"长为 {length},宽为 {width} 的矩形,面积是: {area}")

场景4:

main.py和rectangle.py都在根目录的子目录model下,并且model下还有子目录 utils(跨目录导入)

项目根目录

├── rectangle2.py

└── utils/

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

    └── rectangle.py

└── model/

    └── main.py

运行方式

python -m model.main

如果直接使用python model/main.py,会报错,

当使用 python -m model.main 时,Python 会将当前目录(即项目根目录)添加到 sys.path 的开头。

from utils import calculate_areawidth = 4
length = 6
area = calculate_area(width, length)
print(f"长为 {length},宽为 {width} 的矩形,面积是: {area}")
import mathdef calculate_area(length, width):return length * width

源码的查看

如果第三方库是纯python写的,往往在函数上按住ctrl即可进入函数内部查看源代码。

但是很多第三方库为了性能,底层是用其他语言写的,这里我们计算机视觉库OpenCV为例。

OpenCV核心是用C++编写的(C++可以显著提高性能),但它通过Python等其他语言的接口(bindings)使得这些功能可以在Python环境中被调用。这些接口是通过一种叫做Python/C API的技术实现的,其中C++的功能被封装成Python模块,使得Python用户可以像使用纯Python编写的库一样使用OpenCV。

OpenCV的核心是用C++编写,并且已经编译成二进制文件,编译后的二进制文件可以在不同操作系统上运行,Python中的用户通常不能直接看到方法的源代码。

二进制文件是机器语言,处理器可以直接理解和执行无需翻译,二进制语言反汇编是很困难的,用二进制语言除了效果好外,也是让用户无法看到源代码,保护了自己的知识产权。

这意味着:

●二进制文件dll文件:当你在Python中导入OpenCV库(通import cv2),你实际上是在调用预先编译好的二进制文件。这些文件包含了实现OpenCV功能的可执行代码,而非人类可读的源代码。

●接口封装:用户只能看到Python函数和对象的接口(即函数的定义,不包括实现的细节)。这也意味着无法从利用ctrl跳转到函数内部,pycharm的debugger功能同理也无法看到内部结构。

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

@浙大疏锦行

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

相关文章:

  • 超越想象:利用MetaGPT打造高效的AI协作环境
  • 仿腾讯会议——添加音频
  • 虚幻引擎5-Unreal Engine笔记之`GameMode`、`关卡(Level)` 和 `关卡蓝图(Level Blueprint)`的关系
  • vue3 vite 项目中自动导入图片
  • MTK zephyr平台:系统休眠流程
  • 涨薪技术|0到1学会性能测试第71课-T-SQL调优
  • Spark SQL 之 Antlr grammar 具体分析
  • Python----目标检测(PASCAL VOC数据集)
  • LabVIEW汽车CAN总线检测系统开发
  • MySQL数据库基础 -- SQL 语句的分类,存储引擎
  • 二元Logistic回归
  • 如何从容应对面试?
  • 如何使用GIT管理项目代码
  • RHCE 练习三:架设一台 NFS 服务器
  • 【android bluetooth 协议分析 01】【HCI 层介绍 9】【ReadLocalSupportedCommands命令介绍】
  • stm32实战项目:无刷驱动
  • python打卡训练营打卡记录day30
  • 2025年- H33-Lc141 --148. 排序链表(快慢指针,快指针先出发一步)--Java版
  • 【prometheus+Grafana篇】基于Prometheus+Grafana实现Oracle数据库的监控与可视化
  • 板凳-------Mysql cookbook学习 (四)
  • 【D1,2】 贪心算法刷题
  • 算法题(150):拼数
  • Denoising Score Matching with Langevin Dynamics
  • Docker构建 Dify 应用定时任务助手
  • mongodb管理工具的使用
  • 第2篇 水滴穿透:IGBT模块的绝对防御体系
  • LVGL(lv_dropdown下拉列表控件)
  • 2.微服务-配置
  • python实现pdf转图片(针对每一页)
  • C语言练手磨时间