Python用于构建哪些类型的应用程序?

25

我想知道

Python适用于哪些类型的应用程序?

我是Python世界的新手,但我知道它像Perl一样是一种脚本语言,但我不确定使用Python可以构建哪些类型的应用程序。如果有人能够提供一些有用的信息,我一定会很感激。


@Stackoverflow的读者们:非常感谢你们对我的问题提供了及时的答案。 - Rachel
9个回答

33

很难想到哪些常规应用场景不适合Python,但有几种情况下,就像所有类似的高级语言一样,Python可能被认为是一种奇怪且可能劣质的选择。

在“硬实时”应用程序中,所有动态内存分配和释放,尤其是垃圾回收,都被认为是不可取的;这排除了几乎所有现代语言(包括Python,以及Java,C#等等),因为它们几乎都依赖于某种形式的动态内存处理和垃圾回收。

如果你正在为一个预计会生产和销售大量的"嵌入式设备"编程,每一位ROM可能会显著增加总成本,因此你需要一种专注于将应用程序压缩到最后一个可能的位的语言-任何依赖于丰富的支持运行时环境或操作系统(包括Python,以及再次提到的Java,C #等等)无疑都会迫使您额外花费许多ROM位(考虑像古老的Forth那样的线程解释语言:它们可以使一个实际应用程序的代码比直接的机器代码更紧凑!)。

还有其他的一些类似约束(主要集中在MEMORY上:专注于使用尽可能少的位和/或严格限制执行在精确定义的界限内-无动态性,无分配,无垃圾回收等等),基本上情况会再次倾向于相似的方式(例如,有一些服务器应用程序,旨在在许多服务器上运行,如果使用C++[特别是没有“所谓聪明”的指针; -)]而不是Java、Python、C#等等编写,每个服务器可以节省许多MB)。

当然,现代大多数编程语言(如Python、Java和C#等)选择动态内存分配、垃圾回收等技术是有很好的理由的,尽管这些技术在某些应用场景下可能会是负面因素。如果你能够承担得起这样的内存处理方式,编写应用程序变得更加容易,而且与需要仔细管理内存而缺乏此类支持相关的问题和错误可以消失,程序员的生产率真正提高了……当然,前提是你有足够的经济支持才行。例如,如果一个应用程序要在几百或几千台服务器上运行,我可能不会费心用带有手动内存管理的C++进行编码以节省内存;只有在几十万或数十万台服务器时,那些额外的兆字节的经济性才真正发挥作用。
请注意,尽管有一种常见误解认为“解释型语言”(具有丰富底层运行时或虚拟机的语言,例如Java、C#和Python)“运行速度慢”,事实上对于大多数CPU密集型应用程序(如科学计算),只要考虑到“丰富的支持运行时环境”(例如numpy),Python就完全适合。因此,这并不是真正的因素,尽管在某些领域内存消耗和垃圾回收可能会是问题。

@meder 谢谢,你对“加号”示例的总结也很好(我专注于“减号”示例,因为它们非常具体,更容易解释Python、Java或C#等语言为什么不适合这些特定领域...主要是内存管理问题,实际上!-) - Alex Martelli
有道理。我的经验法则是,在我已经担心是否能够在C或C++中使其运行足够快的情况下,不要在Python中使用它。在我的情况下,我避免在实时DSP工作中使用Python。 - Nosredna
如果这是"硬实时"(不允许内存分配或垃圾回收),我同意:正如我所说,我肯定也会避免使用Python。对于"只是速度"的问题,我不同意--例如,请参见http://mail.python.org/pipermail/python-announce-list/2008-April/006572.html和来自http://www.astro.cornell.edu/staff/loredo/statpy/的前两个链接。 - Alex Martelli
我的项目是“硬实时”的。我构建了一个DLL,它存在于主机中。我从一个缓冲区获取一些样本,对它们进行处理,并将它们写入另一个缓冲区。不允许任何暂停。说起来,我甚至不知道如何在Python中构建一个DLL。 - Nosredna
构建一个DLL(无论是使用COM、IronPython + .NET等等)并不是最大的问题——但是对于任何动态内存、垃圾回收语言来说,“硬实时”并不是真正可行的,因此选择C或C++(并仔细手动处理内存)是一个不错的选择。 - Alex Martelli
很好的总结。对于几乎任何Web应用程序来说,Python都是一个绝佳的选择。 - pbreitenbach

22

简介:

  • Web应用程序(Django,Pylons)
  • 游戏(Eve Online-大型多人在线角色扮演游戏)
  • 软件开发(Trac用于项目管理)
  • 对象数据库(ZODB/Durus)
  • 网络编程(BitTorrent)
  • 移动应用程序

等等...


很棒的答案。我很高兴知道这个。 - duffymo
1
Trac不是桌面软件。 - Sridhar Ratnakumar
Django和Pylons是Web框架。不是吗? - Eimantas
3
我会说它们既是网络应用程序,也是框架。请随意编辑和纠正我。 - meder omuraliev

10

您说:

我是Python世界的新手,但我知道它是一种脚本语言。

我认为“脚本语言”和“编程语言”的区别是相当武断的。在过去的10-20年里开发的几乎每种语言都有某种形式的运行时支持,通常是通过字节码解释器或虚拟机实现的。Python也不例外:它被编译成字节码,并由Python运行时执行。关键是,我认为在Java、C#、Ruby等语言中你可以做的事情,在Python中也几乎都可以做到。

然而,不同的语言具有不同的优势。因此,肯定有一些程序更适合使用Python编写。这取决于您希望编程语言为您完成什么工作,以及您想要自己完成什么工作。正确的答案取决于您对解决哪些问题感兴趣。


1
我很赞同尝试打破“脚本”语言与其他编程语言不同或较差的神话!我已经为此奋斗了15年以上。 :) - Greg Hewgill
+1 “动态语言”是更好的类别来描述Python。 - Todd Owen
@Todd:您说“动态语言”更好地描述了Python,这是正确的。然而,静态与动态的区分与“脚本语言”的概念完全无关。实际上,大多数shell语言都是动态的,人们倾向于用shell或类似shell的语言编写脚本,但这与它本身并没有什么关系。正如我所提到的,从某种角度来看,Java可以被认为是一种“脚本”语言(因为它是字节码解释型的),但它肯定不是一种动态语言(它的语法非常静态类型)。 - Daniel Pryden

5
我知道可能有点晚了,但如果有帮助的话。
Civilization IV
OpenStack
Bazaar
Mercurial
Blender 3D
TwistedMatrix 
Trac
Allura (source project for SourceForge.net)
BitTorrent(<5.3)
Gwibber
Ubuntu Software Center
YUM
OpenERP
journyx

请注意,我已避免使用整个web框架、IDE(如Eric Python IDE、Ninja-ide、PIDA-ide、Wing IDE、Stani的Python编辑器)和工具(Pygame、PyGTK、wxPython、mod python、IPython),以及网络服务(youtube.com、reddit.com、quora.com、dropbox.com)。

1

嗯,简短的回答是,既然你提到了Perl,那么你可以用Python构建任何你可以用Perl构建的东西。你可以用任何语言构建任何东西,如果这种语言有易于绑定C的功能,甚至可以高效地完成任务。

现在,问题变得有些哲学性质。Python的一个关键原则是“应该只有一种方法来做它”。Perl恰好相反。Perl的关键原则是“有多种方法可以做到”(TIMTOWTDI)或(Tim Toady,对他的朋友们而言;))。你喜欢如何做事?是一个被大多数人认同的明确而闪耀的道路?还是你更看重Perl中任何任务都有几乎无限数量的解决方案路径?

因此,假设你的任务是I/O绑定的(像大多数事情一样),而不是CPU绑定的(实时编程或游戏,或者是乳头扭曲的数字计算),那么Python就很合适。它的哲学是否适合是关键问题。


1

现在大多数3D软件包,如Maya、SoftImage、Houdini、RealFlow、Blender等都使用Python作为嵌入式脚本和插件语言。


0

请注意,仅链接答案是不被鼓励的,SO答案应该是寻找解决方案的终点(而不是另一个参考站点,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的摘要,将链接作为参考。 - kleopatra

0

这是一种计算机编程语言,因此理论上可以使用它构建任何计算机程序。单击此处查看示例。


0

BitTorrent 是基于 Python 构建的。


http://en.wikipedia.org/wiki/Bram_Cohen - andandandand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接