现在我主要用C/C++开发,但我在Python中编写了一些小实用程序来自动执行某些任务,我真的很喜欢它作为语言(尤其是生产力).
除了性能之外(由于易于将Python与C模块连接起来,有时可以解决这个问题),您是否认为在开发独立的复杂应用程序时适合生产使用(例如想到文字处理器)或图形工具)?
你会建议什么IDE?在我看来,即使对于小型项目,用Python提供的IDLE也是不够的.
我们使用IronPython在Resolver Systems上构建了我们的旗舰电子表格应用程序(40kloc生产代码 - 它是Python,IMO意味着每个功能的loc很低),所以我肯定地说它已经准备好用于复杂应用程序的生产使用.
有两种方法可能对您没有用处:-)
我们使用的是IronPython,而不是更常用的CPython.这为我们提供了使用.NET类库的巨大优势.我可能会在这里惹火,但我会说我从来没有真正看到过看起来"专业"的CPython应用程序 - 因此访问WinForms小部件集对我们来说是一个巨大的胜利.如果我们需要性能提升,IronPython还为我们提供了能够轻松进入C#的优势.(虽然老实说我们从来不需要这样做.迄今为止我们所有的性能问题都是因为我们选择了愚蠢的算法,而不是因为语言很慢.)使用IP中的C#比为CPython编写C扩展要容易得多.
我们是一个极限编程商店,所以我们在编写代码之前编写测试.如果不首先编写测试,我不会用动态语言编写生产代码; 缺乏编译步骤需要由某些东西来涵盖,正如其他人所指出的那样,没有它的重构可能很难.(Greg Hewgill的回答表明他遇到了同样的问题.另一方面,我认为如果没有先写测试,我不会用任何语言编写 - 或者特别是重构 - 生成代码- 但是YMMV.)
Re:IDE - 每个人都使用他们喜欢的文本编辑器,我们一直很好; 如果你喜欢更重量级的东西,那么WingIDE是非常受欢迎的.
你会发现大多数两个答案 - 宗教的(是的!当然!这是有史以来最好的语言!)和另一个宗教的(你一定是在开玩笑吧!Python?不......它还不够成熟).我可能会跳过最后的宗教信仰(Python?!使用Ruby!).一如既往,事实并非显而易见.
优点:它很简单,可读,包含电池,有很多很好的库,几乎所有东西.它的表现力和动态类型使其在许多情况下更加简洁.
缺点:作为一种动态语言,有更糟糕的IDE支持(正确的语法完成需要静态类型,无论是在Java中显式还是在SML中推断),它的对象系统远非完美(接口,任何人?)并且很容易结束使用凌乱的代码,其方法返回int或boolean或object或在未知情况下返回某种类型.
我的看法 - 我喜欢Python的脚本,自动化,小型webapps和其他简单明确的任务.在我看来,它是迄今为止地球上最好的动态语言.也就是说,我永远不会使用任何动态类型语言来开发大量的应用程序.
说 - 将它用于Stack Overflow会很好,它有三个开发人员,我想不超过30k行代码.对于更大的事情 - 首先你的开发速度会非常快,然后一旦团队和代码库增长,事情就会比使用Java或C#更慢.你需要通过编写更多的单元测试来抵消编译时间检查的不足,重构会变得更难,因为在你运行所有测试甚至整个大应用程序之前,你永远不知道你的refacoring是什么破坏了.
现在 - 决定你的团队将会有多大以及应用程序完成后应该有多大.如果你有5个或更少的人,并且目标大小大致是Stack Overflow,请继续,用Python编写.您将很快完成并对良好的代码库感到满意.但是如果你想写第二个谷歌或雅虎,你会用C#或Java做得更好.
关于你提到的C/C++的侧面说明:如果你没有编写性能关键软件(比如大规模并行光线跟踪器将会运行三个月渲染一部电影)或者一个非常关键的系统(比如火星着陆器会连续三年飞行)并且只有一次机会降落或者你输了4亿美元)不要使用它.对于网络应用程序,大多数桌面应用程序,大多数应用程序通常不是一个好的选择.您将在复杂的业务逻辑中调试指针和内存分配.
在我看来,python已经为开发复杂的应用程序做好了准备.我认为服务器端的pythons强度比编写图形客户端更强.但请查看http://www.resolversystems.com/.他们使用.net ironpython端口在python中开发一个完整的电子表格.
如果您熟悉eclipse,请查看pydev,它提供了对python的自动完成和调试支持,以及所有其他eclipse好东西,如svn支持.开发它的人刚刚被aptana收购,所以这将是未来的坚实选择.
@Marcin
缺点:作为动态语言,IDE支持更糟糕(正确的语法完成需要静态类型,无论是在Java中显式还是在SML中推断),
你是对的,静态分析可能无法为动态语言提供完整的语法完成,但事实上pydev可以很好地完成工作.在编写python时,我有更多不同的开发风格.我总是打开一个ipython会话并使用一个F5我不仅可以从ipython中完美地完成,还可以进行对象内省和操作.
但是如果你想写第二个谷歌或雅虎,你会用C#或Java做得更好.
谷歌只是重写了jaiku在App Engine上工作,所有这些都在python中.据我所知,他们也在google里面使用了很多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,我已经使用过,Eclipse和PyDev也可以完成工作.两者都是OSS,所以他们可以自由尝试!
[编辑] @Marcin:您是否有过在Python中编写> 30k LOC的经验?你应该提到谷歌的可扩展性问题也很有趣,因为他们是Python最大的支持者!另外一个名为NASA的小型组织也经常使用Python;)参见"一个编码器和17,000行代码".
没有什么可以添加到其他答案,除了如果你选择python你必须使用像目前为止没人提到的pylint之类的东西.