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 等方式。

总结

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

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

    关注

    10

    文章

    1945

    浏览量

    34784
  • C++
    C++
    +关注

    关注

    22

    文章

    2110

    浏览量

    73689
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84776

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

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

收藏 人收藏

    评论

    相关推荐

    华为云 Flexus X 实例的场景体验——小企业使用 Python 语言——超迅速搭建简单公网 API 接口服务

    与 flask_cors 库 添加安全组 公网访问测试 总结   环境说明 这里我重新重置一下镜像,使得大家的环境肯定都是样的,免得出现不统的情况。
    的头像 发表于 12-27 13:46 120次阅读
    华为云 Flexus X 实例<b class='flag-5'>下</b>的场景体验——小企业使用 <b class='flag-5'>Python</b> 语言——超迅速搭建简单公网 API 接口服务

    C++新手容易犯的十个编程错误

    简单的总结一下 C++ 新手容易犯的些编程错误,给新人们提供个参考。 1 有些关键字在 cpp 文件中多写了 对于
    的头像 发表于 11-15 12:42 399次阅读

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都觉得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的优化与整理,已经是非常贴近开发的使用习惯与推理方式。与OpenCV的Mat对象对接方式
    的头像 发表于 07-26 09:20 952次阅读

    C++中实现类似instanceof的方法

    C++有多态与继承,但是很多人开始学习C++,有时候会面临个常见问题,就是如何向下转型,特别是不知道具体类型的时候,这个时候就希望C++ 可以向Java或者
    的头像 发表于 07-18 10:16 607次阅读
    <b class='flag-5'>C++</b>中实现类似instanceof的方法

    opencv-python和opencv样吗

    的。以下是对OpenCV和OpenCV-Python的比较: 编程语言: OpenCV是个跨平台的库,支持多种编程语言,如C++、Java、Python等。而OpenCV-
    的头像 发表于 07-16 10:38 1242次阅读

    星Exynos 2500芯片研发取得显著进展

    在半导体技术日新月异的今天,星再次以其卓越的创新能力吸引了全球科技界的目光。据最新媒体报道,星自主研发的Exynos 2500芯片在3nm工艺的研发上取得了显著进展,这
    的头像 发表于 07-16 10:37 730次阅读

    ESP32如何加自定义Python库?

    我看官方有提供Micropython的bin文件,但我想根据自己外设扩充一下Python库,这个应该哪里入手? 之前做过RTT系统的python库扩充,RTT有提供Micropyth
    发表于 06-18 06:27

    北京发布低空经济三年规划,为什么丰台成为产业重镇?

    ,力争通过三年时间,低空经济相关企业数量突破5000家,低空技术服务覆盖全国,低空产业国际国内影响力和品牌标识度大幅提高,产业集聚集群发展取得明显成效,低空产业体系更加健全,在技术创新、标准政策、应用需求、安防反制等领域形成全
    的头像 发表于 05-22 00:02 3032次阅读

    keil用c++编译含有rtos模块时的错误问题怎么解决?

    近期看到个哥们用c++写嵌入式,感觉蛮有趣,如果当初我的程序要是能用类就轻松多了,所以也想尝试一下。虽然不会c++但是还是多少会用简单的class,这个
    发表于 05-09 08:29

    总结一下LM317的几种经典应用电路

    说起LM317,我们做硬件的都很熟悉了,它是LDO的种,并且输出电压很容易通过外部电阻进行调整,今天总结一下LM317的几种经典应用电路。
    的头像 发表于 05-01 10:07 5832次阅读
    <b class='flag-5'>总结</b><b class='flag-5'>一下</b>LM317的几种经典应用电路

    深度学习在时间序列预测的总结和未来方向分析

    2023是大语言模型和稳定扩散的一年时间序列领域虽然没有那么大的成就,但是却有缓慢而稳定的进展。Neurips、ICML和AAAI等会议都有transformer结构(BasisF
    的头像 发表于 02-24 08:26 845次阅读
    深度学习在<b class='flag-5'>时间</b>序列预测的<b class='flag-5'>总结</b>和未来方向分析

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

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

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

    C语言、C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言: C语言是
    的头像 发表于 02-05 14:11 2443次阅读

    C++在Linux内核开发中争议到成熟

    Linux 内核邮件列表中篇已有六历史的老帖近日再次引发激烈讨论 —— 主题是建议将 Linux 内核的开发语言 C 转换为更现代的 C++
    的头像 发表于 01-31 14:11 642次阅读
    <b class='flag-5'>C++</b>在Linux内核开发中<b class='flag-5'>从</b>争议到成熟

    C++简史:C++是如何开始的

    MISRA C++:2023,MISRA® C++ 标准的下个版本,来了!为了帮助您做好准备,我们介绍了 Perforce 首席技术支持工程师 Frank van den Beuken 博士撰写
    的头像 发表于 01-11 09:00 617次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的