首页 > 编程语言 >如何从C++Pytho:变的思维方

如何从C++Pytho:变的思维方

时间:2023-10-23 10:01:45浏览次数:38  
标签:思维 Pytho Python 代码 C++ 内存 使用 上传者


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

从 C++ 转 Python 的时候,我已经是一个有四年全职工作经验的软件开发者了。我的工作主要是用 C++在 Linux 上编程,是 QT 库的重度用户。但刚开始用 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 没什么用,还会拖慢速度,让我失去接触代码的机会。回想起来,我非常依赖编译器来查找类型错误。

图源: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 来安装需要的库。除非必要,我一般都不再监控内存使用了。

图源:Unsplash ;上传者:Channey

一些实用技巧

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

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

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

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

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

结语

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




标签:思维,Pytho,Python,代码,C++,内存,使用,上传者
From: https://blog.51cto.com/u_13978034/7983300

相关文章

  • windows python 3.10.X 安装nose运行失败解决办法
    背景win11python3.10.Xpipinstallnose以后执行nosetests报错。报错内容如下:AttributeError:module‘collections’hasnoattribute‘Callable’ 省流在python3.10.X版本下执行pipuninstallnosepipinstall nose-py3卸载以后重新安装就可以搞定。 尝......
  • Python入门系列21-数学相关模块(math/decimal)
    一、math模块math库是Python提供的内置数学函数库,支持整数和浮点数运算。常用函数和属性如下图所示:函数/属性说明math.pi圆周率math.inf正无穷大math.ceil(浮点数)向上取整math.floor(浮点数)向下取整round(浮点数)四舍五入操作abs(数值)获取数值的绝对值math.fmod(x,y)返回x/y的......
  • python的Faker使用
    importjsonfromfakerimportFakerfaker=Faker(locale='zh_CN')result={"name":faker.name(),#生成名字,每次运行生成不同的名字"contact":faker.address(),#生成地址"age":faker.random_int(18,40),#生成数字,年龄范围"gender......
  • python-使用matplotlib画折线图
    1importos2fromconfigparserimportConfigParser3importmatplotlib.pyplotasplt45plt.rcParams['font.sans-serif']=['SimHei']6plt.rcParams['axes.unicode_minus']=False78configFile='config.ini......
  • 一键解决[notice] A new release of pip available: 22.2 -> 22.2.2 [notice] To updat
    [notice]Anewreleaseofpipavailable:22.2->22.2.2[notice]Toupdate,run:python.exe-mpipinstall--upgradepip文章目录问题描述解决思路解决方法问题描述[notice]Anewreleaseofpipavailable:22.2->22.2.2[notice]Toupdate,run:python.exe-mpip......
  • 代码训练营第十一天(Python)| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150
    20.有效的括号思路:分析出三种情况,画图模拟。写代码容易写错。classSolution:defisValid(self,s:str)->bool:a_stack=list()foriins:ifi=='(':a_stack.append(')')elifi=='{':......
  • Python学习笔记(一)
    Python中一切皆对象,函数和类也是对象,属于Python的一等公民。对象可以赋值给一个变量对象可以添加到集合对象中对象可以作为参数传递给函数对象可以当做函数的返回值对象的三个特征:1、身份(id());2、类型;3、值type->int>1type>class->objobject是最顶层基类type也是一个......
  • Python Web之Django
    一、环境需求1、OS:Windows102、IDE:PyCharm2019.23、Interpreter:Python3.7 二、项目搭建1、构建Django工程,打开PyCharm,点击【File】==》【NewProject...】==》【Django】。 2、项目工程保存路径、工程名称、解释器选择,点击【Create】创建项目工程,如下图所示:  ......
  • 解决Clion中写多个C++文件中存在多个main函数报错的问题
    解决Clion中写多个C++文件中存在多个main函数报错的问题在刷题写C++的时候,常常因为要写多个文件,这时存在多个main就会报错,通常解决这个问题会有以下两种解决方法:把不需要的main给注释掉新建一个Project项目这边我介绍一种新的办法:(适用于IDEA)1.先下载这个插件,C/C++Single......
  • python系列教程216——何时使用列表解析
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......