计算机视觉专家:如何从C++转Python

有人说用 Python 编程很简单,6 岁小孩都能学会。计算机视觉专家和编程语言爱好者 asya f 刚开始上手 Python 时也这么想。但门槛低就仅意味着使用简单吗?经常调用 API 的人是不是一定比可以从零写出源码的人菜?在本文中,asya f 告诉我们,从 C++转向 Python,是一次「从个人到社区」的思维转变。

转载自丨机器之心

计算机视觉专家:如何从C++转Python

从 C++ 转 Python 的时候,我已经是一个有四年全职工作经验的软件开发者了。我的工作主要是用 C++在 Linux 上编程,是 QT 库的重度用户。但刚开始用 Python 的时候,我却写得很烂。

从 C++到 Python 的过渡已经有了大约三年时间,我觉得是时候总结一下这段时间的经历了。回想起来,我改变的不只是自己所用的编程语言,还有工作方式和我对代码的看法。

C++和 Python 的区别此处不做赘述,网上可以找到很多相关信息。此处只讲述我的个人经历。

计算机视觉专家:如何从C++转Python

从 C++跳到 Python(图源:Unsplash ;上传者:Erik Dungan )

C++是跳水,Python 是潜水

C++给人的感觉就像是一头扎进奇幻神秘的大海里——它是如此美妙,但需要更多学习和训练。总的来看,你游过的水面不会很大。而 Python 有点像潜水——把头伸进水里就能看到它的美,但你不会太深入,而是在浅水里游啊游,可以轻易地游过很大一片地方。两种语言如此不同,所以适用的场景也不同。

深入 C++并努力成为幸存者

C++更为严格,在你犯错的时候会更加严厉地惩罚你。一次都没有收到过 Segmentation fault 的编码会话算不上有效的编码会话。因此,你需要更加了解计算机、编译器和语言。如果深入下去,你会被其中蕴含的美所打动,如编译过程和内存管理。

作为一名 C++ 程序员,我更关心句法调整和奇怪的例子。我一直知道我是怎么分配、释放内存的。我写的程序更加独立,因为我更想知道自己的代码内部究竟发生了什么。我主要是觉得其他人编写的代码不太可靠,更容易出错,并且可能会增加内存使用量。

Vim、GDB 和 Valgrind 是我用到的主要日常工具Vim 有很多用于编写代码的插件,GDB 用于 debug,Valgrind 用于分析我的内存占用和错误。我用 g++编译,自己写 Makefiles。那时候,我觉得 IDE 没什么用,还会拖慢速度,让我失去接触代码的机会。回想起来,我非常依赖编译器来查找类型错误。

计算机视觉专家:如何从C++转Python

图源:Unsplash;上传者:Jakob Boman

浅尝 Python

转向 Python 时,你需要学习的第一件事情就是如何放手:你不知道代码的底层到底发生了什么,内存被分配到哪里、释放到哪里,但没关系。你也会被鼓励使用其他人写的封装为库的代码,这能帮助你节省时间,提高编码速度。这并不意味着你需要写慢如蜗牛并依赖于无维护和无功能的库的代码,其中的关键是很不同的。

刚开始用 Python 写代码时,我用 Python 写 C++。这也行得通,但我并没有从这门语言中获得任何收益。当我开始以更加 Python 式的风格来写代码并使用库以及更多高级概念(如 generators、decorators 和 contexts)时,我的编程技巧才得到提升。

作为一个 Python 开发者,我倾向于首先寻找能解决眼前问题的库。Python 拥有丰富的库生态系统和社区的支持。有很多具有专门用途的库。这些是我经常会用到的库:NumPy(数值计算)、OpenCV(计算机视觉)、json(阅读 json 文件)、SciPy(科学计算)、sqlite3(数据库)。

我每天使用的工具是带有 IdeaVim 插件的 PyCharm(这是一个 IDE)。我开始用这个工具是因为它是一个很强大的调试器,比默认的 Python 调试器 pdb 更加友好。我还使用了 pip 来安装需要的库。除非必要,我一般都不再监控内存使用了。

计算机视觉专家:如何从C++转Python

图源:Unsplash ;上传者:Channey

一些实用技巧

如果你是一个 C++开发者,并且考虑开始写 Python,以下是我的一些建议:

  • 改掉老习惯:别再使用 C++编译器作为调试器。不用再过度优化内存使用。避免写出 C++风格的代码。并且无论如何,不要再依赖类型。
  • 养成新习惯:开始使用库。写 Python 式的代码(但不要为了写而写),保证代码的可读性。尝试使用一些更加复杂的概念,如 generators、decorators、contexts。尝试 PyCharm。
  • 使用 C++和 Python 共用库:一些 C++库(如 OpenCV、QT)有 Python 接口。在 Python 中使用相同的库会比从零开始学习一个新库更加容易。
  • 勿忘初心:有时候 Python 实在是太慢或者不适合你的任务,C++经验就派上用场了。有很多方式(SIP、ctypes 等)可以让你在 Python 内使用 C++代码。

结语

无论其他人说什么,切换到另一种编程语言都不容易,尤其是切换到一种与你用过的语言完全不同的语言。你要花时间去学习、挖掘、发现。但最重要的是,你要改变的不仅仅是语言,还有编码风格和工作方法。

-(完)-

计算机视觉专家:如何从C++转Python

—THE END—

Original: https://blog.csdn.net/qq_42672770/article/details/128143782
Author: Peter_Gao_
Title: 计算机视觉专家:如何从C++转Python

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/724400/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Rescal 和 Distmult,知识图谱嵌入(KGE)论文阅读

    主要思想:三维张量分解 参考:双线性模型(一)(RESCAL、LFM、DistMult)知识图谱嵌入(KGE):方法和应用的综述 张量是多维数组,其中零阶张量是标量(scalar)…

    人工智能 2023年6月24日
    078
  • 三维目标检测之ROS可视化

    实验室有一个镭神C16的激光雷达,最近在我这,想拿来玩一玩。本意是做一个实时的检测,通过ROS获取激光雷达的激光点云,用pointpillars模型来进行实时的三维目标检测任务。但…

    人工智能 2023年6月16日
    086
  • Canny的C++实现

    好的图像边缘检测应该满足 尽可能的标记处所有的边缘; 标记出的边缘就是实际图像内容的边缘; 图像中的边缘只标记一次。 Canny边缘检测的步骤 图像灰度化; 高斯滤波(不限制)降噪…

    人工智能 2023年7月19日
    057
  • 大数据:Storm 集成 Redis 详解

    一、简介 Storm-Redis 提供了 Storm 与 Redis 的集成支持,你只需要引入对应的依赖即可使用: <dependency> <groupId&g…

    人工智能 2023年7月30日
    062
  • 机器学习实战练手项目

    前导 更多文章代码详情可查看博主个人网站:https://www.iwtmbtly.com/ 下文用到的数据集和代码可以从这里下载《数据集》 机器学习是一种从数据生成规则、发现模型…

    人工智能 2023年6月15日
    053
  • TensorFlow2.0 学习-维度

    x.shape=[2,3,4] 修改视图 tf.reshape(x,newShape) 增加维度 tf.expand_dims(x,axis)指定axis前插入维度 tf.expa…

    人工智能 2023年5月25日
    0133
  • 深度学习–解决模型过拟合的问题

    文章目录 * – 一、过拟合 – + 1.什么是过拟合 + 2.模型为什么会产生过拟合呢?这是因为: + 3.调参训练模型的目的: + 4.对欠拟合的说明 …

    人工智能 2023年6月16日
    076
  • 维度和指标(metrics and dimensions)

    维度和指标是什么? 维度和指标大家或多或少都有接触过。属于数据分析领域的基础知识,在分析报告或者分析工具中时有出现,因此大家对此要有所了解。 维度和指标的英文分别是metrics …

    人工智能 2023年6月11日
    0101
  • C/C++ Qt 标准Dialog对话框组件应用

    在Qt中对话框分为两种形式,一种是标准对话框,另一种则是自定义对话框,在一般开发过程中标准对话框使用是最多的了,标准对话框一般包括 QMessageBox,QInputDialog…

    人工智能 2023年6月29日
    083
  • HOG特征+SVM 进行行人检测,bootstrapping SVM调优。带源码,分析步骤,异常处理分析。

    场景:检测自然环境中的行人 识别:就是对物体进行分类检测:就是回答是否有人流程->检测->识别 思想:大多数检测算法的核心思想是把图像拆分成很多小的块,然后将每个图像块…

    人工智能 2023年7月19日
    060
  • pandas.DataFrame 中的insert(), pop()

    pandas.DataFrame 中的insert(), pop() 在pandas中,del、drop和pop方法都可以用来删除数据,insert可以在指定位置插入数据。可以看看…

    人工智能 2023年6月2日
    092
  • 张量在强化学习中的应用有哪些

    张量在强化学习中的应用 在强化学习中,张量是一种多维数组,广泛应用于构建状态、动作和奖励等关键数据的表示。张量不仅可以用于存储数据,还可以执行各种张量操作,如乘法、加法和切片等。通…

    人工智能 2024年1月1日
    042
  • vscode+cmake+opencv调试

    vscode+cmake+opencv调试 vscode与cmake的联合使用已经在使用CMAKE与VScode运行与调试C++讲过了,这样的话就加入opencv就行了,步骤也十分…

    人工智能 2023年7月20日
    054
  • R-GCN关系图卷积神经网络实战总结

    R-GCN 关系图卷积神经网络链路预测任务论文复现总结 今天给大家带来的是R-GCN关系图卷积神经网络实战总结。这篇总结是参考于图神经网络的经典论文 Modeling Relati…

    人工智能 2023年5月26日
    086
  • web前端设计与开发期末作品_期末大作业【使用HTML制作汽车首页】

    🎉精彩专栏推荐 💭文末获取联系✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主💂 作者主页: 【主页——🚀获取更多优质源码】🎓 web前端期末大作业: 【📚毕设项目精品实战…

    人工智能 2023年6月28日
    087
  • 语义网络与知识图谱

    当前的web: 取得了巨大的成功 产生了海量的数据 有了用于结构化数据传输的标准语法(XML) 大量机器可处理,人类可读的文档 当前的Web存在的问题 信息太多但是结构化太少 信息…

    人工智能 2023年6月1日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球