English 中文(简体)
Python适合大型软件项目(而不是基于web的)吗?[已关闭]
原标题:
  • 时间:2008-08-30 07:08:22
  •  标签:
Closed. This question is opinion-based. It is not currently accepting answers.

想改进这个问题吗 更新问题,以便通过编辑此文章用事实和引文回答。

Closed 2 years ago.

现在我主要用C/C++进行开发,但我用Python编写了一些小实用程序来自动化一些任务,我真的很喜欢它作为一种语言(尤其是生产力)。

除了性能(由于Python与C模块的接口很容易,这个问题有时可以解决)之外,你认为它适合在开发独立的复杂应用程序(例如文字处理器或图形工具)时用于生产吗?

你建议使用什么IDE?在我看来,Python提供的IDLE即使对于小项目来说也是不够的。

最佳回答

我们使用IronPython在Resolver系统,所以我可以肯定地说,它已经为复杂应用程序的生产使用做好了准备。

有两种情况下,这对你来说可能不是一个有用的答案:-)

  1. We re using IronPython, not the more usual CPython. This gives us the huge advantage of being able to use .NET class libraries. I may be setting myself up for flaming here, but I would say that I ve never really seen a CPython application that looked "professional" - so having access to the WinForms widget set was a huge win for us. IronPython also gives us the advantage of being able to easily drop into C# if we need a performance boost. (Though to be honest we have never needed to do that. All of our performance problems to date have been because we chose dumb algorithms rather than because the language was slow.) Using C# from IP is much easier than writing a C Extension for CPython.
  2. We re an Extreme Programming shop, so we write tests before we write code. I would not write production code in a dynamic language without writing the tests first; the lack of a compile step needs to be covered by something, and as other people have pointed out, refactoring without it can be tough. (Greg Hewgill s answer suggests he s had the same problem. On the other hand, I don t think I would write - or especially refactor - production code in any language these days without writing the tests first - but YMMV.)

回复:IDE-我们对每个人使用他们最喜欢的文本编辑器都很满意;如果你更喜欢重量级的东西,那么WingIDE非常受欢迎。

问题回答

你会找到两个答案——宗教的一个(是的!当然!这是有史以来最好的语言!)和宗教的另一个(你一定在开玩笑!Python?不…它还不够成熟)。我可能会跳过最后一个宗教(Python?!使用Ruby!)。和往常一样,事实远非显而易见。

优点:它易于阅读,包括电池,几乎所有东西都有很多好的库。它富有表现力和动态的打字使它在许多情况下更加简洁。

Cons:作为一种动态语言,IDE支持要差得多(正确的语法完成需要静态类型,无论是在Java中显式的还是在SML中推断的),其对象系统还远远不够完美(接口,有人吗?),并且很容易导致混乱的代码,在未知的情况下,这些代码的方法返回int或boolean、object或某种排序。

我的看法——我喜欢Python的脚本、自动化、小型网络应用程序和其他定义良好的简单任务。在我看来,这是迄今为止地球上最好的动态语言。也就是说,我永远不会使用任何动态类型语言来开发相当大的应用程序。

比方说,将它用于Stack Overflow是很好的,它有三个开发人员,我想代码不超过3万行。对于更大的事情——首先你的开发会非常快,然后一旦团队和代码库增长,事情就会比Java或C#慢得多。你需要通过编写更多的单元测试来弥补编译时间检查的不足,重构变得更加困难,因为在你运行所有测试甚至整个大型应用程序之前,你永远不知道你的重构破坏了什么。

现在,决定你的团队将有多大,以及应用程序完成后应该有多大。如果你有5个人或更少的人,并且目标大小大约是Stack Overflow,那么继续用Python编写。你很快就会完成,并对良好的代码库感到满意。但如果你想写第二个谷歌或雅虎,你会更好地使用C#或Java。

你提到的C/C++附带说明:如果你不是在写性能关键型软件(比如将运行三个月渲染电影的大型并行光线跟踪器)或非常关键的任务系统(比如火星着陆器,它将连续飞行三年,只有一次着陆机会,否则你将损失4亿美元),就不要使用它,一般来说,大多数应用程序都不是一个好的选择。在复杂的业务逻辑中,调试指针和内存分配都会失败。

在我看来,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.

谷歌刚刚重写了jaiku,以在应用程序引擎上工作,全部使用python。据我所知,他们在谷歌内部也使用了很多python。

我真的很喜欢python,这通常是我现在选择的语言,用于我自己做的小(非gui)事情。

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

事实上,这是我有时会错过的另一件事。可以用Python编写语法正确的代码,但这些代码根本无法运行。编译器在实际执行代码之前无法告诉你这一点,因此在不常用的代码路径(如错误处理程序)中,你很容易发现隐藏的错误。即使是像打印带有%format字符串的错误消息这样简单的代码,也可能因为类型不匹配而在运行时失败。

我还没有将Python用于任何GUI内容,所以我不能对这方面发表评论。

Python被认为(在Python程序员中:)是一种用于快速原型设计的优秀语言。没有太多无关的语法妨碍你的思维过程,所以你所做的大部分工作都倾向于进入代码。(与编写好的C++相比,编写好的Python代码所需的习语要少得多。)

鉴于此,大多数Python(CPython)程序员将其归因于“过早优化是万恶之源”的哲学。通过编写高级(而且速度明显较慢)Python代码,可以在应用程序接近完成时使用C/C++绑定来优化瓶颈。在这一点上,通过适当的评测,您的处理器密集型算法会变得更加清晰。通过这种方式,您可以以一种可读性和可维护性很强的方式编写大部分代码,同时还可以加快速度。出于这个原因,您将看到几个用C编写的Python库模块。

Python中的大多数图形库(即wxPython)无论如何都只是C++库的Python包装器,所以您几乎是在编写C++后端。

要解决IDE问题,SPE(Stani的Python编辑器)是我使用过的一个很好的IDE,”http://pydev.sourceforge.net/“rel=”noreferrer“>PyDev也完成了这项工作。两者都是OSS,所以可以自由尝试!

[编辑]@Marcin:你有写作经验吗>;Python中的30k LOC?同样有趣的是,你应该提到谷歌的可扩展性问题,因为他们是Python最大的支持者!此外,一个名为NASA的小型组织也经常使用Python;)请参阅”一个编码器和17000行代码“

除了如果您选择python,则必须使用类似pylint到目前为止还没有人提到。

判断python的用途的一种方法是查看目前哪些产品使用python。这wikipedia页面有一长串列表,包括各种网络框架、内容管理系统、版本控制系统、桌面应用程序和IDE。

正如它所说此处-”使用Python的一些最大的项目是Zope应用程序服务器、YouTube和原始的BitTorrent客户端。使用Python的大型组织包括谷歌、雅虎、!,欧洲核子研究中心和美国国家航空航天局。ITA的一些组件使用Python。"

简而言之,是的,它“适合在开发独立的复杂应用程序时用于生产”。许多其他语言也是如此,有各种各样的优点和缺点。哪种语言最适合您的特定用例太主观了,无法回答,所以我不会尝试,但通常答案是“您的开发人员最了解的语言”。

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

据我所知,他们在谷歌内部也使用了很多python。

好吧,我希望如此,如果我没有错的话,python的制造商仍然在谷歌工作?

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

Python使用起来很愉快。我经常使用它,还写了很多用C#工作的代码。用Python编写UI代码有两个缺点。一个是没有一个ui框架被大多数社区所接受。当你用c编写时,.NET运行库和类库都应该协同工作。对于Python,每个UI库都有自己的语义,这通常与您试图编写程序的Python思维方式不一致。我不是在责怪图书馆的作家。我试过几个库(wxwidgets、PythonWin[Wrapper around MFC]、Tkinter)。在这样做的时候,我经常觉得我在用Python以外的语言编写代码(尽管事实上是Python),因为这些库并不完全是Python的——它们是来自另一种语言的端口,无论是c、c++还是tk。

所以对我来说,我将用.NET(对我来说是C#)编写UI代码,因为IDE和;图书馆的一致性。但如果可以的话,我会用python编写业务逻辑,因为它更清晰、更有趣。

我知道我可能是在说显而易见的事情,但不要忘记,开发团队的质量和他们对技术的熟悉程度将对您的交付能力产生重大影响。

如果你有一个强大的团队,那么如果他们熟悉,这可能不是问题。但是,如果你有9到5岁以上的人不熟悉这项技术,他们将需要更多的支持,如果生产力的提高值得,无论支持的成本是多少,你都需要打电话。

我只有一次python经验,那就是我的垃圾cli项目。

我知道,可能部分或全部问题都取决于我对python缺乏经验。

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

  1. the difficult of finding a good IDE for free
  2. the limited support to automatic refactoring

此外:

  1. the need of introduce two level of grouping packages and modules confuses me.
  2. it seems to me that there is not a widely adopted code naming convention
  3. it seems to me that there are some standard library APIs docs that are incomplete
  4. the fact that some standard libraries are not fully object oriented annoys me

尽管有些python程序员告诉我他们没有这些问题,或者他们说这些都不是问题。

试试Django或Pylons,用它们编写一个简单的应用程序,然后决定哪一个最适合你。还有其他(如涡轮齿轮或Werkzeug),但它们是使用最多的。





相关问题
热门标签