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

【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.xdnf.cn/news/537895.html

相关文章:

  • 盲盒APP开发——解锁盲盒经济无限可能
  • mapbox-gl强制请求需要accessToken的问题
  • Chromium 回调设计实战:BindOnce 与 BindRepeating 的最佳实践
  • 【css】【面试提问】css经典问题总结
  • Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
  • 嵌入式自学第二十四天
  • 整数的个数
  • Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
  • 理解前端工程化
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷2:从入门到应用篇
  • java集成mqtt
  • 停等协议(Stop-and-Wait Protocol)
  • AI人工智能写作平台:AnKo助力内容创作变革!
  • 铅铋环境下应力腐蚀的疲劳试验装置
  • 什么业务需要用到waf
  • 20. 自动化测试框架开发之Excel配置文件的IO开发
  • 【monai 教程】transform之CropPad详解
  • 磁流体 磁性流体 磁液
  • 封装一个基于 WangEditor 的富文本编辑器组件(Vue 3 + TypeScript 实战)
  • UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings
  • Oracle 中 open_cursors 参数详解:原理、配置与性能测试
  • 一键无损批量压缩图片 保留高清细节 开源免费!支持 10 + 格式转换
  • HashMap 的特点及应用场景
  • GraphQL 接口设计
  • SRS流媒体服务器(6)源码分析之推流篇
  • 2025.05.19【Barplot】柱状图的多样性绘制
  • Linux句柄数过多问题排查
  • stm32如何触摸屏设置显示按钮
  • c#将json字符串转换为对象数组
  • Linux-进程信号