对于哪些类型的应用程序,Python是一个错误的选择?[关闭]


21

我刚开始学习Python,并且想了解更多有关该语言的知识。

我意识到,在许多情况下,相对于C或C ++,Python是一种慢速语言。因此,对于可能需要尽快运行的应用程序,Python可能不是最佳选择。

除此之外,Python似乎是一种很棒的通用语言,易于阅读和编写。可用的库为它提供了大量功能。在对性能有严格要求的应用程序之外,使用Python在哪里是一个不好的选择(为什么)?


8
没有一种伟大的通用语言。每五年左右,就会有一个新的替代旧的,而旧的只能在细分市场中生存。Lisp,Fortran,Pascal,Basic,Ada,Perl ...
mouviciel 2011年

3
@mouviciel:帕斯卡是一种利基语言?好的,其名称已更改为Delphi以匹配Borland / CodeGear / Embarcadero IDE,但Delphi仍然(基于)Pascal,尽管它失去了市场份额,但我不会确切地称它为利基语言。与此无关,也没有“基本”。Visual Basic仍然是Basic。Delphi和Visual Basic都在许多公司中使用...
Marjan Venema

7
“ Python是相对于C或C ++的慢速语言”。您应该使用所使用的特定基准来对此进行备份。在某些情况下(进行很多系统调用的I / O绑定程序),Python与C一样快,因为它只是C库的包装器。
S.Lott

@美国洛特True,并且PyPy有时对手JVM或甚至C / C ++
亚提sagade

我上大学时,Pascal曾经是首选的教学语言。然后过了几十年,现在在她的Java看来。我专业地编写了几种语言(大约十二种),但是仍然很有趣地编写了Delphi。
Mawg '16

Answers:


22

针对具有有限资源的嵌入式目标的软件。由于资源不足,该星球上的大多数处理器要么无法运行Python,要么没有人将版本移植到该架构。即使是现在,大多数处理器的内存还不到一兆字节。


…直到有人制作了Arduino的Python端口。等一下!
Spoike 2011年

5
@Spoike该链接用于在计算机上实际运行python,并且仅与arduino串行通信。Arduino没有运行python代码
basarat

1
@BasaratAli:免责声明-我开玩笑地写了我的评论。;-)
Spoike 2011年

14

让我想到的两个地方是需要大量并发的事情,为此我将使用Erlang。或重型数值计算,我可能会尝试使用Fortran。


1
Fortran在数值计算方面是否仍领先于C / C ++?...
Sardathrion-恢复Monica 2011年

1
你知道我不知道。这不是我经验丰富的领域。但是我确实知道,fortran人员已经花费了30多年的时间才能使他们的工具真正快速地运行。
Zachary K

@Sardathrion-很难说。你自然而然的理解。但是,几个月前,英特尔Fortran成名的Lionel先生表示,他们的Fortran系列产品的销售量超过了其开发系列中其他产品的销售量(并不是那么狭窄)。
Rook

@Idigas:的确,我知道Fortran已被广泛使用,但这可能是由于遗留代码而不是优化约束所致。也许我应该问一个问题...
Sardathrion-恢复莫妮卡

还请记住,许多从事数值计算的人都非常了解Fortran,这是他们选择的工具。因此,当他们必须执行此类任务时,他们将接触Fortran。
Zachary K

8

由于Python是一种动态类型的语言,没有编译时检查,因此很难重构没有大量单元测试的大型Python项目。

因此,如果您有一个需要长期维护和修改的大型项目,并且您的团队不致力于为所有内容创建自动化测试,那么使用Java或C#可能会更好。


17
没有单元测试就很难重构任何大型项目。
Sardathrion-恢复莫妮卡

9
是的,但是没有类型安全性要难得多。
埃里克·威尔逊

3
@Eric Wilson-即使那样,强类型输入也可能给您一种错误的安全感…… 它可以编译,发布!
Mark Booth,

2
这可能不是问题的100%,但仍然是有效的。与Java或C#之类的语言相比,缺少对动态类型语言的工具支持,尤其是重构。在大型Python项目中,仅重命名内容可能是一项详尽的练习。
OliverS 2011年

Python是否需要单独的运行时或VM,还是可以生成一个自包含的可执行文件?
吉姆(Jim)在德克萨斯州,2012年

2

如果主要重点是Windows GUI开发,那么我建议不要使用CPython,因为缺少好的表单设计器(与使用.Net相比)。

但是,IronPython在.Net上运行,您可以从两个带有Form设计器的IDE中进行选择:Visual Studio和SharpDevelop。实际上,Visual StudioPython工具可以用于CPython以及IronPython,虽然我还没有尝试过,但是它却很整洁。


2

这确实取决于您所说的“错误选择”的含义。

如果您的意思是应用程序在使用Python时非常困难,那么应用程序相对较少:想到的主要部分(尚未被提及)是要求高度正确性的代码,其中包含复杂类型系统的语言(Haskell,依赖类型的语言) )是更好的选择。

如果您的意思是Python不是次优的应用程序(也就是说,有更好的选择),那么应用程序会更多,但是它们也更加主观。例如,以我公认的有限经验为基础,与Python相比,使用代数数据类型,模式匹配和更多功能特性对编译器和解释器的工作要容易得多。但是,不可能像这样详尽列出应用程序,因为它们因人而异。


2

由于它的表达能力和各种各样的支持库,它是快速编写脚本的理想选择。

动态类型检查和缺少显式变量声明使它成为涉及数十万甚至数百万行代码的大型项目的不佳选择。关键任务系统或安全关键系统也是如此。例如,在航空电子系统中,由于在编译时可能已捕获的错误而导致系统故障是完全不可接受的。


0

好吧,就像您一样,我也刚开始使用Python。但是对于我来说,是在机器学习和数据科学的背景下。

我还刚刚获得了Java 8及其面向流的新库中的所有新鲜知识。

我真的很喜欢新Java 8流库的流畅感觉,以及我欠Apache Spark库的感觉。当我进入Python时,我期望它会更多。

我确实看到了更多。但是少得多。文档不足,尽管有很多。没有任何流动性,事实上,我只是在猜测一种方法是在统治一个新对象,还是在此方法上进行操作;没有东西靠近地图/缩小等。令我惊讶的是我很失望。

然而,从一开始,我对语言的学习就没有那么大的期望。人们发现我是对的:前后矛盾,不直观,很难学习。但这只是我擅长于Java一切的经验。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.