现在我主要使用 C/C++ 进行开发,但我用 Python 编写了一些小实用程序来自动化一些任务,我真的很喜欢它作为语言(尤其是生产力)。
除了性能(由于易于将 Python 与 C 模块连接起来,有时可以解决这个问题),您认为它是否适合用于开发独立复杂应用程序的生产用途(例如考虑文字处理器或图形工具)?
你会建议什么IDE?在我看来,Python 提供的 IDLE 即使对于小型项目也是不够的。
我们在Resolver Systems使用 IronPython 构建了我们的旗舰电子表格应用程序(40kloc 生产代码 - 它是 Python,IMO 意味着每个功能的 loc 低) ,所以我肯定地说它已经准备好用于复杂应用程序的生产使用。
有两种方法可能对您没有用处:-)
回复:IDE——我们对每个人使用他们最喜欢的文本编辑器都很好;如果你更喜欢重量级的东西,那么WingIDE是相当受欢迎的。
你会找到两种答案——一个是宗教的(是的!当然!这是有史以来最好的语言!),另一个是宗教的(你一定是在开玩笑吧!Python?不......它还不够成熟)。我可能会跳过最后一个宗教(Python?!使用 Ruby!)。与往常一样,真相远非显而易见。
优点:它简单易读,包括电池,有很多很好的库,几乎可以满足所有需求。它的表现力和动态类型使其在许多情况下更加简洁。
缺点:作为一种动态语言,IDE 支持更差(正确的语法完成需要静态类型,无论是在 Java 中显式还是在 SML 中推断),它的对象系统远非完美(接口,有人吗?)并且很容易结束带有杂乱的代码,其方法在未知情况下返回 int 或 boolean 或 object 或某种类型。
我的看法——我喜欢用 Python 编写脚本、自动化、微型 web 应用程序和其他简单的定义明确的任务。在我看来,它是迄今为止地球上最好的动态语言。也就是说,我永远不会使用任何动态类型语言来开发大型应用程序。
说 - 将它用于 Stack Overflow 会很好,它有三个开发人员,我猜不超过 30k 行代码。对于更大的事情——首先你的开发会非常快,然后一旦团队和代码库增长,事情就会比 Java 或 C# 慢得多。您需要通过编写更多的单元测试来弥补编译时间检查的不足,重构变得更加困难,因为在您运行所有测试甚至整个大型应用程序等之前,您永远不知道重构破坏了什么。
现在——决定你的团队有多大,以及一旦完成,应用程序应该有多大。如果你有 5 个人或更少的人,并且目标大小大致是 Stack Overflow,那么继续,用 Python 编写。您将立即完成并对良好的代码库感到满意。但是,如果您想编写第二个 Google 或 Yahoo,那么使用 C# 或 Java 会好得多。
您提到的关于 C/C++ 的旁注:如果您不是在编写性能关键软件(比如将运行三个月渲染电影的大型并行光线追踪器)或非常关键的系统(比如将连续飞行三年的火星着陆器)并且只有一次降落的机会,否则您将损失 4 亿美元)不要使用它。对于 Web 应用程序、大多数桌面应用程序、大多数应用程序来说,这不是一个好的选择。您将在复杂的业务逻辑中死去调试指针和内存分配。
在我看来,python 已经为开发复杂的应用程序做好了准备。我在服务器端看到 python 的力量比编写图形客户端更多。但是看看http://www.resolversystems.com/。他们使用 .net ironpython 端口在 python 中开发了一个完整的电子表格。
如果您熟悉 eclipse,请查看pydev,它为 python 提供自动完成和调试支持以及所有其他 eclipse 好东西,如 svn 支持。开发它的人刚刚被aptana 收购,所以这将是未来的可靠选择。
@Marcin
缺点:作为一种动态语言,IDE 支持更差(正确的语法完成需要静态类型,无论是在 Java 中显式还是在 SML 中推断),
您是对的,静态分析可能无法为动态语言提供完整的语法补全,但我认为 pydev 可以很好地完成工作。此外,我在编写 python 时有不同的开发风格。我总是打开一个 ipython 会话,并且使用一个 F5 我不仅可以从 ipython 完美完成,而且还可以进行对象自省和操作。
但是,如果您想编写第二个 Google 或 Yahoo,那么使用 C# 或 Java 会好得多。
谷歌刚刚重写了 jaiku以在 App Engine 之上工作,全部使用 python。据我所知,他们在谷歌内部也使用了很多 python。
我真的很喜欢 python,现在它通常是我自己做的小(非 gui)东西的首选语言。
但是,对于我处理过的一些较大的 Python 项目,我发现它与 C++ 中的编程不太一样。我正在研究一个语言解析器,并且需要在 Python 中表示一个 AST。这当然在 Python 可以做的范围之内,但是我在重构时遇到了一些麻烦。我正在更改我的 AST 的表示,并更改了很多方法和类,我发现我错过了 C++ 解决方案中可用的强类型。Python 的鸭子类型几乎太灵活了,我发现自己添加了很多assert
代码来尝试在程序运行时检查我的类型。然后我不能确定所有内容都正确输入,除非我进行了 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,你必须使用pylint 之类的东西,到目前为止没有人提到过。
判断python用于什么的一种方法是查看目前使用python的产品。这个维基百科页面有很长的列表,包括各种 Web 框架、内容管理系统、版本控制系统、桌面应用程序和 IDE。
正如这里所说- “一些使用 Python 的最大项目是 Zope 应用程序服务器、YouTube 和最初的 BitTorrent 客户端。使用 Python 的大型组织包括 Google、Yahoo!、CERN 和 NASA。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),因为这些库不是t完全是pythonic,它们是另一种语言的移植,无论是c、c++、tk。
所以对我来说,由于 IDE 和库的一致性,我将在 .NET(对我来说是 C#)中编写 UI 代码。但是当我可以的时候,我会用 python 编写业务逻辑,因为它更清晰,更有趣。
我知道我说的可能是显而易见的,但不要忘记开发团队的质量和他们对技术的熟悉程度将对您的交付能力产生重大影响。
如果你有一个强大的团队,那么如果他们很熟悉,这可能不是问题。但是,如果您有更多不熟悉该技术的 9 到 5 岁的人,他们将需要更多支持,并且如果提高生产力值得付出任何支持的成本,您就需要打电话。
我只有一种 python 经验,我的垃圾 cli 项目。
我知道可能部分或全部问题取决于我对 python 的缺乏经验。
我发现这些事情令人沮丧:
而且:
虽然一些 python 编码人员告诉我他们没有这些问题,或者他们说这些都不是问题。
尝试 Django 或 Pylons,用它们编写一个简单的应用程序,然后决定哪一个最适合你。还有其他的(例如 Turbogears 或 Werkzeug),但这些是最常用的。