0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从C++转到Python三年,总结一下这段时间取得的进展

电子工程师 来源:lq 2019-01-28 09:59 次阅读

很多人都说用 Python 编程十分简单,即便是 6 岁的小孩也可轻松学会。我自己最开始使用 Python 编程时也这样认为。那时我作为全职软件开发人员已有 4 年时间,主要在 Linux 平台上基于 QT 库进行 C++ 编程。但是,我最初使用 Python 时编写了很多糟糕的代码。

如今,我已经从 C++ 转到 Python 三年了,我觉得自己有必要总结一下这段时间取得的进展。回顾这段经历,不仅是我的主要编程语言发生了变化,此外,我的工作环境以及我对代码的思考方式也发生了变化。

在本文中,我将主要分享自己的经验,而不会详细描述 C++ 和 Python 之间的细节和差异,因为网上已经有了许多它们的对比文章。我希望这篇文章对于像我一样有着类似经历的人有所帮助。

C++ 像深潜,Python 像浮潜

使用 C++ 就像深浅一样,你可以潜入大海深处探索其神奇的奥秘和美丽,但这需要大量的学习和练习,但总的来说,你所覆盖的面积不会太大。

而Python 则更像浮潜,你只需把头伸进水里,就可以看到美丽的景色,但你无法继续深入。你只能继续在浅水区游动,可以轻而易举地游很远,覆盖很大的海面。从这个描述可以清楚地看出,每种语言都应该在正确的地点和时间使用。

深入 C++

C++ 非常严格,它会对你的错误进行严厉的惩罚。在你的编码过程中,几乎很难避免段错误。因此,使用 C++ 编程需要开发者深入了解计算机、编译器和编程语言。随着学习过程的深入,你可以看到很多美好的东西,比如编译过程和内存管理。

作为一名 C++ 程序员,我需要密切关注各种语法。我需要对内存的分配和释放了如指掌。程序的依赖性更少,因为我喜欢对自己所写代码内部发生的事情有所了解。如果使用太多其他人的库,可能会不太可靠,出错之后很麻烦,并且可能会破坏你的内存使用量。

我习惯使用 Vim 来编程,此外会搭配很多插件,比如用于调试的 GDB 和用于分析程序内存使用情况和错误的 Valgrind。我自己编写 Makefile 然后用 g++ 编译代码。

那时的自己并不觉得 IDE 益处很大,我宁可放慢速度也不会让自己失去对代码的掌控。现在回想起来,我确实非常依赖编译器来查找类型错误。

在 Python 中浅泳

从 C++ 切换到 Python 时,你需要学习的第一件事就是要学会放手:在 Python 中你很难知道程序的内部机制,不知道内存如何被分配和释放。你还会经常使用其他人编写的代码,这些代码将打包到库中,因为它们可以节省你的时间并帮助你更快地编写代码。这并不意味着你需要编写速度慢且依赖于未维护和非功能库的代码,但重点肯定是不同的。

当我开始用 Python 编写代码时,我首先按照 C++ 的思路来编程 Python 代码。这当然可行,但我并没有发挥出 Python 的优势。当我开始以更 “Pythonic” 的方式编程并开始使用库以及更高级的概念(比如生成器、装饰器和上下文)时,我的 Python 编程技能才得到显著的提升。

作为一名 Python 开发人员,我遇到问题时首先会看看有没有现成的库可以解决该问题。Python 拥有丰富的库生态系统及其社区。这些丰富和庞大的库几乎涵盖了所有领域。我经常使用的库有:用于数值计算的 NumPy、计算机视觉库 OpenCV、用来读取 JSON 文件的 JSON、用于科学计算的 SciPy以及 SQLite3 数据库。

我最常使用的 IDE 是带有 IdeaVim 插件的 PyCharm。这是一款功能非常强大的调试器,它比默认的 Python 调试器 pdb 更好用。我使用 pip 来安装我所需要的库。除非我真的需要,否则我不再监视我程序的内存使用情况。

一些实用的技巧

如果你是一名 C++ 开发人员,并且考虑开始使用 Python 编程,以下是我的一下小建议:

改掉旧习惯

不要把 C++ 编译器当调试器用。不要过度优化内存使用情况。避免编写类似 C++ 风格的代码。无论如何,尽量不要依赖类型。

培养新习惯

善用 Python 库。编写 Pythonic 代码(但不要过度)。保持可读性。使用更复杂的概念,比如生成器、装饰器、上下文。试试 PyCharm。

使用 C++ 和 Python 公共库

某些 C++ 库(如 OpenCV 和 QT)具有 Python 接口。很容易在 Python 中使用相同的库,而不是从头开始学习新的库。

根据应用场景选择恰当的编程语言

有时 Python 太慢或者不适合某类任务。此时就该 C++ 出马了。在 Python 中使用 C++ 代码的方法很多,有 SIP、ctypes 等方式。

总结

不管其他人怎么说,实际上,从一种语言切换到另一种编程语言并不容易,尤其是新的语言与你习惯使用的语言区别很大时。你需要花很多时间学习、深入、探索。但最重要的是,要明白不仅语言应该改变,而且你的编码风格和工作方法也要改变。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33062
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72899
  • python
    +关注

    关注

    51

    文章

    4674

    浏览量

    83460

原文标题:C++转Python这三年,我都经历了什么?

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    简单总结一下嵌入式C++中常见的错误形式

    对于 C++ 类,一些关键字只要写在 .h 中就好,cpp 中就不用再加上了,比如 virtual、static 等关键字,如果在 cpp 中多写,编译器会报错。
    的头像 发表于 02-23 09:40 160次阅读

    c语言,c++,java,python区别

    C语言、C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言: C语言是一种面向过程的编程语言。它具有底层的特性,能够对计算机硬件进行直接操作。C语言简洁、高效,常用于开发
    的头像 发表于 02-05 14:11 441次阅读

    时间戳使用技巧

    好久前写过一篇相关的推文, 当时也是第一次接触和使用, 由于没有深入的了解和研究, 这段时间一直存在疑惑, 趁着这段时间就回顾一下和解决疑惑
    的头像 发表于 12-18 09:17 322次阅读
    <b class='flag-5'>时间</b>戳使用技巧

    【飞腾派4G版免费试用】+ Python编程及PWM指令测试

    在当初申请开发板时,看重它的个关注点就是它在系统中嵌入了Python。 之所以关注Python,是因为在各种编程语言中它最比较适合学习,另外Python 解释器易于扩展,可使用
    发表于 12-13 10:39

    用户代码跳转到系统bootloader

    用户代码跳转到系统bootloader提供种直接用户代码直接跳转到系统Bootloader 的方法。
    发表于 10-19 06:10

    基于HALCON的模板匹配方法总结

    推荐很早就想总结一下前段时间学习HALCON地心得,但由于其他地事情总是抽不出时间。去年有过一段时间地集中学习,做了许多地练习和实验,并对基
    发表于 09-19 06:13

    BLDC电机的驱动原理详解

    大家好,我是盲僧,最近这段时间在研究BLDC电机,在这里顺便总结和分享一下BLDC的驱动原理。
    的头像 发表于 08-24 10:49 3095次阅读
    BLDC电机的驱动原理详解

    C++演示中的推理速度比Python演示中的推理速度更快是为什么?

    在同主机机上采用相同型号的 Ran Object Detection C++ 演示 和 对象检测 Python 演示 。 C++ 演示中的推理速度比
    发表于 08-15 06:52

    为什么python适合人工智能

    Python是一种相对简单的编程语言。它的语法和结构逻辑清晰,代码易于阅读和理解。Python中没有像C++或Java那样的过多的符号和特殊语法。这使得Python很容易让编程新手进入
    的头像 发表于 08-13 14:30 749次阅读

    如何为Arm编译Cc++代码

    C++源代码翻译成机器代码的编译器。 •将汇编语言源代码翻译成机器代码的汇编程序。 •个链接器,用于将多个机器代码模块组合成个可执行文件。 可用的工具链包括: •Arm编译器6。基于armclang
    发表于 08-02 17:28

    安光所在时间分辨频率调制磁旋光谱脉冲激光术方面取得进展

    近日,中国科学院合肥物质院安光所张为俊研究员团队在时间分辨频率调制磁旋转光谱探测技术方面取得进展,相关研究成果以《用于OH自由基时间分辨测量的高带宽中红外频率调制磁旋转光谱仪》为题发
    的头像 发表于 08-02 11:38 525次阅读
    安光所在<b class='flag-5'>时间</b>分辨频率调制磁旋光谱脉冲激光术方面<b class='flag-5'>取得</b>新<b class='flag-5'>进展</b>

    起探索C++的世界!

    C++
    YS YYDS
    发布于 :2023年07月07日 19:10:25

    嵌入式-C++函数的重载

    的函数名定义,从而形成重载,方便使用,某种层度上函数的重载也是C++大特性之的多态的种形式 、函数重载的应用场景 #include
    发表于 06-28 13:54

    如何Linux C++ User App运行此类应用程序?

    和 CS42888 编解码器。我想使用 CS42888。什么是正确的方法来做到这点?如何 Linux C++ User App 运行此类应用程序?也许应该使用 GStreamer 或 ALSA 库?
    发表于 05-18 10:17

    电赛总结之上位机(树莓派python-opencv实时识别黑线)

    在准备电赛的这段时间里,我确实学到了很多东西,我会一点一点更新博客,从头到尾总结一下,本篇博客主要写一下树莓派opencv的使用,在这里我不
    发表于 05-10 09:29 2次下载
    电赛<b class='flag-5'>总结</b>之上位机(树莓派<b class='flag-5'>python</b>-opencv实时识别黑线)