计算机视觉专家:如何从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/793759/

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

(0)

大家都在看

  • Pandas最详细教程来了!

    导读:在Python中,进行数据分析的一个主要工具就是Pandas。Pandas是Wes McKinney在大型对冲基金AQR公司工作时开发的,后来该工具开源了,主要由社区进行维护…

    Python 2023年8月19日
    066
  • flask部署阿里云服务器,公网ip访问不了(一些问题及解答)

    flask部署阿里云服务器,公网ip访问不了(新手踩坑之路) 好朋友,你是不是一个后端初学者?相信到目前为止,你已经拥有一定的后端基础,在发现单机本地的后端开发已经无法满足你,于是…

    Python 2023年8月9日
    0109
  • APScheduler管理及监控平台

    APScheduler是一个非常好用的调度平台,不过目前所有Scheduler的JOB信息都无法通过可视化的方式展示,只能通过后台日志来查看调度信息,对于管理上非常不便。 但是AP…

    Python 2023年8月14日
    062
  • 2022最新超详MySQL(很适合初学者,基础篇)

    🍊个人主页:个人主页🍍​ 系列专栏:MySQL数据库温馨提示:本篇博客为基础篇全部内容,收藏以防找不到。 上节目录 一.Mysql下载安装启动(适合没有下载按照好MySQL的小伙伴…

    Python 2023年11月8日
    040
  • 区块链开发完整指南。如何开发一款区块链项目?

    区块链开发完整指南 如今,区块链已成为主流技术,以其去中心化的特性为应用程序提供动力。区块链技术的日益普及和有前途的内在特性已经在人们之间建立了信任,因此它已在全球多个行业中得到广…

    Python 2023年10月9日
    060
  • DataFrame(11):数据转换——map()函数的使用

    1、map()函数 1)map()函数作用 将序列中的每一个元素,输入函数,最后将映射后的每个值返回合并,得到一个迭代器。 2)map()函数原理图 原理解释:上图有一个列表,元素…

    Python 2023年8月23日
    063
  • 表格识别技术综述

    表格结构识别综述 ICDAR2019 ICDAR2021 竞赛 中国图象图形学报 PRCV 2021 腾讯 小米 2021论文 * ICCV2021 ACM MM 2021 ICD…

    Python 2023年10月8日
    072
  • 图解自注意力机制

    写在最前边 这个文章是《图解GPT-2 | The Illustrated GPT-2 (Visualizing Transformer Language Models)》的一部分…

    Python 2023年10月26日
    046
  • np.argmax()的使用

    2.一维向量 会根据索引(0开始),得到最大值的索引下标 import numpy as np a=np.array([1,2,3,4,5]) print(np.argmax(a)…

    Python 2023年8月27日
    054
  • Numpy:读取本地文件及数据处理

    可以理解为方向,使用0,1,2…数字表示,对于一个一维数组,只有一个0轴,二维数组有0轴和1轴,三维数组有0,1,2轴,以此类推。(可以理解为数学中的x,y,z轴) 有…

    Python 2023年8月26日
    076
  • [WPF] 使用 HandyControl 的 CirclePanel 画出表盘刻度

    1. 前言 最近需要一个 WPF 的表盘控件,之前 Cyril-hcj 写过一篇不错的博客 《WPF在圆上画出刻度线》,里面介绍了一些原理及详细实现的代码: double radi…

    Python 2023年10月23日
    040
  • 读书方法

    旧书不厌百回读,熟读深知子自知。 要研究透彻本专业的经典。 读书要学会终身下苦功夫,知十而非真知,不如知一之真知也,读书不能一知半解。 读书决定了一个人的见识和思想的深刻,这些都是…

    Python 2023年10月28日
    057
  • 亚马逊云科技——云原生主题容器入门笔记

    嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 目录 一、容器入门课程 二、容器入门课堂笔记 1.容器背…

    Python 2023年9月16日
    056
  • 驱动开发:内核CR3切换读写内存

    首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读…

    Python 2023年6月11日
    069
  • Masked array掩膜数组操作:建立、合并与分割(Numpy)

    建立masked array 横向合并masked array 纵向合并masked array 分割masked array 官方网站参考 当从数据中得到了带有掩膜的数组,我们通…

    Python 2023年8月29日
    043
  • 《天黑黑》歌词

    [00:40.490]我的小时候 吵闹任性的时候[00:44]我的外婆 总会唱歌哄我[00:48]夏天的午后 姥姥的歌安慰我[00:52.5]那首歌好像这样唱的[00:56]天黑黑…

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