Python是否适合大型软件项目(而非基于Web的项目)?

时间:2020-03-05 18:45:22  来源:igfitidea点击:

现在,我主要使用C / C ++进行开发,但是我用Python编写了一些小型实用程序来使某些任务自动化,并且我非常喜欢它作为语言(特别是生产力)。

除了性能(由于易于将Python与C模块接口,这个问题有时可以解决)之外,我们认为它是否适合在独立的复杂应用程序开发中进行生产使用(例如考虑使用文字处理器)或者图形工具)?

我们会建议使用哪种IDE?我认为,即使对于小型项目,Python附带的IDLE还是不够的。

解决方案

回答

我认为python远远不止于开发复杂的应用程序。与编写图形客户端相比,我认为python在服务器端的优势更大。但请访问http://www.resolversystems.com/。他们使用.net ironpython端口在python中开发了整个电子表格。

如果我们熟悉eclipse,请查看pydev,它为python提供了自动完成和调试支持,以及所有其他eclipse优点,例如svn支持。开发它的人刚刚被aptana收购,因此这将是未来的可靠选择。

@马辛

Cons: as a dynamic language, has way
  worse IDE support (proper syntax
  completion requires static typing,
  whether explicit in Java or inferred
  in SML),

没错,静态分析可能无法为动态语言提供完整的语法完成,但是我觉得pydev可以很好地完成这项工作。此外,在编写python时,我有不同的开发风格。我总是打开一个ipython会话,并且使用一个F5不仅可以从ipython获得完美的完成,而且还可以进行对象自省和操作。

But if you want to write second Google
  or Yahoo, you will be much better with
  C# or Java.

Google只是重写了Jaiku,使其在App Engine之上运行,全部使用python。据我所知,他们也在Google内部使用了很多python。

回答

我真的很喜欢python,这些天通常是我自己选择的小型(非gui)程序的语言。

但是,对于我已经解决的一些较大的Python项目,我发现它与C ++编程并不完全相同。我正在开发语言解析器,并且需要用Python表示AST。这当然在Python可以做到的范围之内,但是我在进行一些重构时遇到了一些麻烦。我正在大量更改AST的表示形式,并更改了方法和类,但我发现我错过了在C ++解决方案中可以使用的强类型。 Python的鸭子输入几乎太灵活了,我发现自己添加了很多"断言"代码来尝试在程序运行时检查我的类型。然后,除非我进行了100%的代码覆盖率测试(当时我没有这样做),否则我无法真正确定是否正确键入了所有内容。

其实,那是我有时想念的另一件事。可以在Python中编写语法正确的代码,而这些代码根本不会运行。在实际执行代码之前,编译器无法告诉我们有关它的信息,因此在不常用的代码路径(例如错误处理程序)中,我们很容易发现潜伏的错误。即使类型像打印带有%格式字符串的错误消息一样简单的代码,也可能由于类型不匹配而在运行时失败。

我没有将Python用于任何GUI东西,因此无法对此方面发表评论。

回答

(在Python程序员中,)Python被认为是一种用于快速原型开发的好语言。思维过程中没有太多无关的语法,因此我们所做的大部分工作都倾向于编写代码。 (与编写良好的C ++相比,编写良好的Python代码所需的习语要少得多。)

鉴于此,大多数Python(CPython)程序员将"过早的优化是万恶之源"的哲学归因于。通过编写高级(且速度明显较慢)的Python代码,可以在应用程序接近完成时使用C / C ++绑定来优化瓶颈。在这一点上,通过适当的性能分析,我们可以更清楚地了解处理器密集型算法是什么。这样,我们可以以非常易读和可维护的方式编写大多数代码,同时又可以加快速度。出于这个原因,我们将看到几个用C编写的Python库模块。

无论如何,Python中的大多数图形库(即wxPython)都是围绕C ++库的Python包装器,因此我们几乎是在编写C ++后端。

为了解决IDE问题,我使用了SPE(Stani的Python编辑器)是一个很好的IDE,带有PyDev的Eclipse也可以完成这项工作。两者都是OSS,因此可以自由尝试!

[编辑] @Marcin:我们是否有使用Python编写> 30k LOC的经验?值得一提的是,我们应该提到Google的可扩展性问题,因为它们是Python的最大支持者!同样,一个名为NASA的小型组织也经常使用Python;)请参阅"一个编码器和稍后的17,000行代码"。

回答

我们会发现有关该宗教的一个答案(是的!当然!这是有史以来最好的语言!)和另一个宗教的答案(我们一定是在跟我开玩笑!Python?不……还不够成熟)。我也许会跳过最后的信仰(Python ?!使用Ruby!)。一如既往,真相远非显而易见。

优点:易用,易读,包括电池,并具有许多几乎所有功能的良好库。它的表现力和动态类型使其在许多情况下都更加简洁。

缺点:作为一种动态语言,IDE支持的方式要差得多(正确的语法完成需要静态键入,无论是Java显式还是SML推断),其对象系统都远非完美(接口,有人吗?),并且很容易最终实现使用凌乱的代码,该代码具有在未知情况下返回int或者boolean或者object或者某种类型的方法的方法。

我喜欢Python,它可以执行脚本编写,自动化,小型Web应用程序和其他简单定义良好的任务。在我看来,这是迄今为止地球上最好的动态语言。就是说,我永远不会使用任何动态类型化的语言来开发规模庞大的应用程序。

说它可以用于Stack Overflow,它有3个开发人员,我猜代码不超过3万行。对于更大的事情,首先,开发将超级快,然后,一旦团队和代码库增长,事情的速度就会比Java或者C#慢得多。我们需要通过编写更多的单元测试来弥补缺乏编译时间检查的麻烦,重构变得更加困难,因为直到我们运行所有测试甚至整个大型应用程序之前,我们都不知道重新整理的结果。

现在,确定团队规模以及完成后该应用程序的规模。如果人数不超过5人,并且目标大小大约是Stack Overflow,请继续使用Python编写。我们将很快完成,并且对良好的代码库感到满意。但是,如果我们想编写第二个Google或者Yahoo,则使用Cor Java会更好。

我们已经提到过C / C ++的旁注:如果我们不是在编写性能关键型软件(例如将运行三个月的大型平行raytracer渲染胶片)或者任务非常关键的系统(如火星着陆器将连续飞行三年)并且只有一次机会降落,否则我们将损失4亿美元)请勿使用它。对于Web应用程序,大多数桌面应用程序,大多数大多数应用程序而言,这不是一个好选择。我们将死于复杂的业务逻辑中的调试指针和内存分配。

回答

我知道我可能在说些显而易见的话,但是请不要忘记开发团队的素质及其对技术的熟悉程度将对交付能力产生重大影响。

如果我们有一支强大的团队,那么如果他们熟悉的话,这可能不是问题。但是,如果我们有9到5多岁的人不熟悉这项技术,那么他们将需要更多支持,并且无论生产力支持的成本是多少,我们都需要致电。

回答

在较大的代码库上,重构是不可避免的,而缺少静态类型使得python比静态类型的语言难得多。

回答

判断python用途的一种方法是查看当前使用python的产品。该Wikipedia页面上的列表很长,包括各种Web框架,内容管理系统,版本控制系统,桌面应用程序和IDE。

就像在这里说的那样:"使用Python的一些最大的项目是Zope应用程序服务器,YouTube和原始的BitTorrent客户端。使用Python的大型组织包括Google,Yahoo!,CERN和NASA。ITA在某些应用程序中使用Python它的组成部分。"

简而言之,是的,它"适合在独立的复杂应用程序开发中用于生产"。其他许多语言也各有利弊。对于特定用例而言,哪种语言是最好的,过于主观而无法回答,因此我不会尝试,但是答案通常是"开发人员最了解的语言"。

回答

我们已经使用IronPython在Resolver Systems上构建了我们的旗舰电子表格应用程序(40kloc生产代码,它是Python,这意味着IMO每个功能的定位很低),所以我肯定会说它已经准备好用于复杂应用程序的生产使用。

有两种方法可能对我们没有帮助:-)

  • 我们使用的是IronPython,而不是通常的CPython。这给了我们使用.NET类库的巨大优势。我可能在这里为自己着火,但我会说我从未真正看过看起来像"专业"的CPython应用程序-因此,访问WinForms小部件集对我们来说是一个巨大的胜利。 IronPython还为我们提供了以下优势:如果需要提高性能,可以轻松地加入C#。 (尽管说实话,我们从来不需要这样做。迄今为止,我们所有的性能问题都是因为我们选择了笨拙的算法,而不是因为语言运行缓慢。)从IP使用C#比为CPython编写C扩展容易得多。
  • 我们是一家极限编程商店,因此我们在编写代码之前先编写测试。如果不先编写测试,就不会用动态语言编写生产代码。缺少编译步骤需要用某些东西来弥补,并且正如其他人指出的那样,没有它的重构可能很困难。 (Greg Hewgill的回答表明他也遇到了同样的问题。另一方面,我认为这些天我不会(而不是首先编写测试)以任何语言编写(或者特别是重构)生产代码而无需首先编写测试,而是YMMV。)

回复:IDE,我们每个人都使用他们喜欢的文本编辑器进行了很好的调试。如果我们更喜欢重量级的东西,那么WingIDE就是个很好的选择。

回答

除了添加python之外,我们还必须使用诸如pylint之类的东西,到目前为止还没有人提及。

回答

我只有一个python经验,我的trash-cli项目。

我知道一些或者所有问题可能取决于我对python的经验不足。

我发现这些事情令人沮丧:

  • 免费找到好的IDE的困难
  • 对自动重构的有限支持

而且:

  • 需要引入两个级别的分组程序包和模块使我感到困惑。
  • 在我看来,没有广泛采用的代码命名约定
  • 在我看来,有些标准库API文档不完整
  • 一些标准库不是完全面向对象的事实困扰着我

尽管有些python编码器告诉我他们没有这些问题,或者他们说这不是问题。

回答

And as far as I know they use a lot of python inside google too.

好吧,我希望如此,如果我没记错的话,python的制造商仍然可以在google上工作吗?

至于Python的使用,我认为这对于独立应用程序来说是一种很棒的语言。它在许多Linux程序中都大量使用,并且那里有一些不错的小部件可以帮助开发GUI。

回答

Python是一种令人愉悦的使用方式。我经常使用它,还编写了很多在C#中工作的代码。用Python编写UI代码有两个缺点。一个是没有一个被大多数社区接受的ui框架。当我们使用cthe编写时,.NET运行时库和类库都旨在一起工作。使用Python,每个UI库都有自己的语义,这些语义通常与我们试图编写程序的python思维方式不一致。我不是在怪图书馆作家。我尝试了几个库(wxwidgets,PythonWin [MFC中的包装器],Tkinter),这样做时,我常常觉得我在用Python以外的语言编写代码(尽管事实是python),因为这些库不是完全是pythonic,它们是c,c ++,tk等另一种语言的移植。

因此,对我来说,由于IDE和库的一致性,我将在.NET(对我而言C#)中编写UI代码。但是,当我可以的时候,我会用python编写业务逻辑,因为它更清晰,更有趣。

回答

尝试使用Django或者Pylons,并用它们编写一个简单的应用程序,然后确定最适合应用程序。还有其他一些工具(例如Turbogears或者Werkzeug),但是使用最多的是其他工具。