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

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

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

有帮助吗?

解决方案

我们使用 IronPython 构建了我们的旗舰电子表格应用程序(40kloc 生产代码 - 它是 Python,IMO 意味着每个功能的 loc 很低) 旋转变压器系统, ,所以我肯定会说它已经准备好用于复杂应用程序的生产使用。

有两种方式可能对您来说这不是有用的答案:-)

  1. 我们使用 IronPython,而不是更常见的 CPython。这为我们提供了能够使用 .NET 类库的巨大优势。我可能会在这里怒火中烧,但我想说的是,我从未真正见过看起来“专业”的 CPython 应用程序 - 因此,能够访问 WinForms 小部件集对我们来说是一个巨大的胜利。IronPython 还为我们提供了一个优势,如果我们需要提升性能,就可以轻松地转向 C#。(虽然说实话我们有 绝不 需要这样做。迄今为止,我们所有的性能问题都是因为我们选择了愚蠢的算法,而不是因为语言速度很慢。)使用 IP 中的 C# 比为 CPython 编写 C 扩展要容易得多。
  2. 我们是一家极限编程商店,因此我们在编写代码之前先编写测试。如果不先编写测试,我不会用动态语言编写生产代码;缺少编译步骤需要用某些东西来覆盖,正如其他人指出的那样,没有它的重构可能会很困难。(格雷格休吉尔的回答表明他也遇到了同样的问题。另一方面,我不认为我会编写 - 或者特别是重构 - 生产代码 任何 现在的语言无需先编写测试 - 但 YMMV。)

关于:IDE - 我们对每个人使用他们最喜欢的文本编辑器都非常满意;如果你更喜欢重量级的东西那么 翼IDE 是相当受好评的。

其他提示

你会发现这个问题主要有两个答案——宗教答案(是的!当然!这是有史以来最好的语言!)和另一种宗教语言(你开玩笑吧!Python?不...还不够成熟)。我可能会跳过最后一个宗教(Python?!使用红宝石!)。事实一如既往,远非显而易见。

优点: :它很简单,可读,包含电池,有很多很好的库,几乎可以满足所有需求。它的表现力和动态类型使其在许多情况下更加简洁。

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

我的看法是——我喜欢用 Python 来编写脚本、自动化、小型网络应用程序和其他定义明确的简单任务。我认为到目前为止 最好的 地球上的动态语言。也就是说,我会 绝不 用它 任何 动态类型语言来开发大规模的应用程序。

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

现在 – 决定您的团队将有多大,以及应用程序完成后应该有多大。如果您的人数不超过 5 人,并且目标规模大致为 Stack Overflow,请继续使用 Python 编写。您将很快完成并对良好的代码库感到满意。但如果你想编写第二个 Google 或 Yahoo,那么使用 C# 或 Java 会更好。

您提到的关于 C/C++ 的旁注:如果您不是在编写性能关键型软件(例如,将运行三个月渲染电影的大型并行光线追踪器)或非常关键的任务系统(例如,将连续飞行三年且只有一次机会正确着陆的火星着陆器) 4亿美元)不要使用它。对于网络应用程序、大多数桌面应用程序、大多数一般应用程序来说,这不是一个好的选择。您将在复杂的业务逻辑中调试指针和内存分配。

在我看来,Python 已经完全可以用来开发复杂的应用程序了。我在服务器端看到了 python 的优势,而不是编写图形客户端。但看看 http://www.resolversystems.com/. 。他们使用 .net IronPython 端口在 Python 中开发了整个电子表格。

如果您熟悉 eclipse,请看一下 pydev 它为 python 提供自动完成和调试支持,以及 svn 支持等所有其他 Eclipse 功能。开发它的人刚刚被收购了 阿普塔纳, ,所以这将是未来的可靠选择。

@马辛

缺点:作为一种动态语言,有办法 较差的 IDE 支持(正确的语法 完成需要静态类型, 无论是在 Java 中显式的还是推断的 在 SML 中),

你是对的,静态分析可能无法为动态语言提供完整的语法补全,但我认为 pydev 很好地完成了这项工作。此外,我在Python编程时有不同的开发风格。我总是打开一个 ipython 会话,通过按一下 F5,我不仅能从 ipython 获得完美的完成,还能获得对象内省和操作。

但是如果你想写第二个谷歌 或者雅虎,你会好得多 C# 或 Java。

谷歌刚刚重写了jaiku 在 App Engine 之上工作,全部使用 Python。据我所知,他们在谷歌内部也使用了大量的Python。

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

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

事实上,这是我有时会怀念的另一件事。在 Python 中编写语法正确但根本无法运行的代码是可能的。编译器在实际执行代码之前无法告诉您这一点,因此在不常用的代码路径(例如错误处理程序)中,您很容易潜伏着看不见的错误。即使是像使用 % 格式字符串打印错误消息这样简单的代码,也可能会因类型不匹配而在运行时失败。

我还没有使用 Python 来处理任何 GUI 的东西,所以我无法评论这方面。

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

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

Python 中的大多数图形库(即wxPython)只是 C++ 库的 Python 包装器,因此您几乎是在向 C++ 后端进行写入。

为了解决您的 IDE 问题, 固相萃取 (Stani 的 Python 编辑器)是我用过的一个很好的 IDE,并且 派德 也完成工作。两者都是 OSS,所以可以免费尝试!

[编辑]@Marcin:您是否有过用 Python 编写 > 30k LOC 的经验?同样有趣的是,您应该提到 Google 对可扩展性的担忧,因为他们是 Python 最大的支持者!另外一个名为 NASA 的小组织也经常使用 Python ;)参见 “一名编码员后来编写了 17,000 行代码”.

其他答案没什么可补充的 除了 如果你选择 python 你 必须 使用类似的东西 皮林特 到目前为止还没有人提到过。

判断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),因为这些库不是“不完全是Pythonic,它们是从另一种语言(c、c++、tk)移植过来的。

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

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

如果你有一支强大的团队,那么他们熟悉的话可能不是问题。但是,如果您的员工朝九晚五,不熟悉该技术,那么他们将需要更多支持,并且无论支持成本如何,您都需要打电话确认生产力的提高是否值得。

我只有一种 Python 经验,那就是我的trash-cli 项目。

我知道可能部分或所有问题都取决于我对 python 的经验不足。

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

  1. 免费找到一个好的 IDE 很困难
  2. 对自动重构的支持有限

而且:

  1. 引入两级分组包和模块的需要让我感到困惑。
  2. 在我看来,没有广泛采用的代码命名约定
  3. 在我看来,有一些标准库 API 文档不完整
  4. 一些标准库不是完全面向对象的事实让我很恼火

虽然有些Python程序员告诉我他们没有这些问题,或者他们说这些不是问题。

尝试 Django 或 Pylons,用它们编写一个简单的应用程序,然后决定哪一个最适合您。还有其他的(如 Turbogears 或 Werkzeug),但这些是最常用的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top