我花了几天时间阅读有关C ++和Python的内容,我发现Python更简单易学。
所以我想知道真的值得花时间学习它吗?或者我应该花时间学习C ++?
C ++可以做什么,Python不能做什么?
答案 0 :(得分:38)
一些Python限制:
- Python很慢。它可以通过多种方式进行改进(参见其他答案),但裸骨cPython比C / C ++慢100倍。
这个问题越来越得到缓解。使用Numpy,Pypy和asyncio,大多数性能问题都没有涉及,只有非常具体的用例才是Python中的瓶颈。
- Python向任何东西开放。保护/混淆/限制Python代码真的很难。
- Python不是炒作。与Ruby不同,Python之间没有“酷潮”,而且找到经验丰富的Python编码器仍然要困难得多,比如Java或者Java PHP专业人员。
- 使用Python之后,许多语言似乎都很难用。你认为它很好,但请相信我,并非总是如此。当你在Python项目之后必须使用Javascript时,你的眼睛会流泪至少3天。真的很难开始。
- 找到网络托管比使用流行的解决方案更难,例如PHP。
- 作为一种动态语言,您没有使用Java和Eclipse或C#和VS可以获得的非常方便的重构工具。
- 出于同样的原因,你不能依赖类型检查作为安全网。这就是为什么pythonistas倾向于遵循最佳实践并且比其他人更频繁地编写单元测试。
- 似乎我找不到具有良好代码完成功能的IDE 。 PyDev,Gedit,Komodo,SPE等等都没有做到尽善尽美。
使用Python 3类型的提示和工具,如PyCharm或Sublime Text + Anaconda,情况发生了很大变化。
- 最好的文档仍然只有英文。有些人处理不好。
- 你必须习惯语法。你不仅可以获得空格和换行符而不是大括号,但你可以忘记长lambdas, - i和三元操作。
现在,对我而言,这些并不是学习不会让你在享受更多乐趣的同时生产更多工具的理由。但也许只是我: - )
老实说,鉴于:
除非你有涉及C ++的专业问题,否则你最好先学习Python,这样更有动力。您以后仍然可以学习C ++,它是系统编程,嵌入式设备等的有用语言。
不要试图同时学习两者,多任务很少结束。
答案 1 :(得分:32)
这就是为什么值得学习Python的原因:
相对较少的问题受到算法速度的限制。相对较多的问题受到开发者速度的限制。
答案 2 :(得分:9)
你为什么不问相反的问题?与C ++不同,Python可以通过其import
命令为您提供antigravity和召唤souls。另一方面,C ++的'等价' - #include
- 只允许你获得一些无聊的I / O和数学库。
严重的是..C ++允许你做更多低级别的事情,例如内核编程,并允许您编写运行速度更快的程序(约 ~20x)。 您可以使用它来创建可以利用多核处理器的真实线程,而Python(due to its design)通常只能在单个核心上运行其模拟线程。
可以找到关于速度差异的更具体测量here.
编辑:好像我的多线程信息已经过时了;请参阅John Paulett的评论。
答案 3 :(得分:4)
一般来说,它们不会用于同类事物。 Python对于原型设计非常有用,因为它非常简单,但当速度是一个重要因素时,并不总是最佳选择,因为它是一种解释型语言。 C ++可以进行大量优化,但正如您所说,编写和理解可能要困难得多。
如果您想进行系统或应用程序编程,您应该学习C ++。如果您是为了娱乐和休闲而编程,或者为了解决像http://projecteuler.net/这样的问题,那么Python也是一个不错的选择。
我个人也建议首先学习C / C ++,如果你想对编程非常认真,因为它会教你内存管理的重要概念,这在管理语言中可能会被忽略。
答案 4 :(得分:3)
如果你想知道你是否还会被雇用一些
以后使用C ++或Python时,不要只关心单一语言的长寿。
学习编程。不要学习<insert a language here>.
这是一个类比:如果你的车运转正常(让你到达你的位置) 去,有很好的里程,便宜维护,相对安全),有 没有合理的理由将它换成另一个。没有。任何。 在您考虑制作或型号之前,先将它推到地面 接下来。但如果你已经在四处寻找想要买什么车了 得到,只是去得到它,停止问你认识的每个人是否应该 做到这一点。如果您需要询问,则需要更改它。这很简单 那。
答案 5 :(得分:0)
学习静态类型语言和脚本语言。
你可以用任何一种语言做任何你想做的事。编写良好的C ++代码库比使用相同级别的能力编写的Python代码库更易于维护/调试。
如果你的目标是做网络内容或脚本,那么Python就适合你。任何更高级的东西都需要C ++。
话虽如此,请选择Python。
答案 6 :(得分:0)
正如其他人所建议的那样:学习Python来学习算法和更高级别的概念,并将其用于原型设计和适合您的地方。学习面向就业市场的C / C ++和/或Java以及必须使用它的情况。
Python非常简单的语法和高级库允许您在仍具有功能原型的同时专注于接口和抽象。
答案 7 :(得分:0)
目前尚未提及的一个显着差异是像C ++这样的语言与本机代码之间的区别,以及Python之类的语言,默认情况下会在您和硬件之间放置VM。对于低级别的工作,比如对OS内核进行编码,本地语言将是首选选项。
实际上,当你在上下文中工作时,它通常意味着一直向下移动C(作为便携式汇编程序),而不是能够使用C ++(及其运行时库),如果不是所有的代码。
答案 8 :(得分:0)
人们经常使用C来实现(而据我所知)从未使用过Python的一件事是底层代码,例如操作系统内核和嵌入式软件。
C有很多结构,例如,可以将任意机器地址转换为指针并取消引用,或者告诉编译器用于内存映射I / O的地址可能会改变,这非常容易。尽管此程序不会更改它,也不会指定对象在内存中的确切布局。它的设计目的是尽可能快地运行,并减少内存浪费,而不是确保安全。
这就是关于“让自己开枪射击”的评论。
答案 9 :(得分:-1)
将Python与Java,Perl和其他编程语言进行比较
教授来自卡尔斯鲁厄大学的Lutz Prechelt将Python与其他编程语言进行了比较。他总结了他的结果:“比较了相同需求集的80个实现的几个属性,例如运行时间,内存消耗,源文本长度,注释密度,程序结构,可靠性以及编写它们所需的工作量。结果表明,对于给定的涉及字符串操作和字典搜索的编程问题,“脚本语言”(Perl,Python,Rexx,Tcl) 生产力更高 比“常规语言”(C,C ++,Java)在运行时间和内存消耗方面,它们通常比Java更好,但不比C或C ++差很多,一般而言,语言之间的差异往往较小比由于同一种语言的不同程序员而导致的典型差异要大得多。(请参阅Lutz Prechelt,C,C ++,Java,Perl,Python,Rexx和Tcl的经验比较,IEEE计算机,第30卷,第(10)页,第1页。 2000年10月23日至29日。)