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

北京皮炎专科医院 http://m.39.net/disease/a_9118499.html

点击上方“小白学视觉”,选择加"星标"或“置顶”

重磅干货,第一时间送达

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

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

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

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

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

C++是跳水,Python是潜水

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

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

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

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

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

图源:Unsplash;上传者:JakobBoman

浅尝Python

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

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

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

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

图源:Unsplash;上传者:Channey

一些实用技巧

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

改掉老习惯:别再使用C++编译器作为调试器。不用再过度优化内存使用。避免写出C++风格的代码。并且无论如何,不要再依赖类型。

养成新习惯:开始使用库。写Python式的代码(但不要为了写而写),保证代码的可读性。尝试使用一些更加复杂的概念,如generators、decorators、contexts。尝试PyCharm。

使用C++和Python共用库:一些C++库(如OpenCV、QT)有Python接口。在Python中使用相同的库会比从零开始学习一个新库更加容易。

勿忘初心:有时候Python实在是太慢或者不适合你的任务,C++经验就派上用场了。有很多方式(SIP、ctypes等)可以让你在Python内使用C++代码。

结语

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

-(完)-

下载1:OpenCV-Contrib扩展模块中文版教程在「小白学视觉」


转载请注明:http://www.aierlanlan.com/rzfs/611.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了