你更喜欢在什么样的应用或问题上使用Python而非严格的面向对象语言?

4 投票
8 回答
543 浏览
提问于 2025-04-15 12:23

我在C语言风格的编程语言方面有很强的基础,也参与过各种不同类型的项目。最近,我开始认真研究Python,因为我读了《编程集体智能》这本书。我了解到Python能解决C#能解决的任何问题,反之亦然。不过,我很好奇那些同时使用这两种语言的人,通常在什么情况下会选择其中一种,而不考虑其他因素,比如同事的经验等等。

你们在什么情况下会选择用Python来开发应用,而不是像C#或Java这样静态类型、纯面向对象的语言呢?

编辑:

我有点担心这个问题会偏离主题。Python是一种面向对象的语言。不过,正如下面所说的,当你的应用有很复杂的业务需求时,Python可能不是首选语言。我知道Python广泛使用对象,甚至函数也是对象,这在我之前提到的所有“面向对象”语言中并不都是这样。

尽管我在问题中的用词不太准确(几乎没有语言能用两三个词准确描述,而且很难指出语言之间的差异而不让人觉得是在看不起某类开发者),我仍然非常想知道你们在什么情况下更倾向于使用Python而不是其他语言。

8 个回答

3

我几乎只用Python来支持我在其他语言中开发软件。我要强调的是,这并不是因为Python有什么问题,而是我所从事的软件领域通常有其他更合适的语言或框架,或者根本就只有那些选项:

  • 网页开发:我很想在Google App Engine上试试Python,但目前我所有的个人网页开发都是用PHP完成的。
  • 桌面应用开发:我使用Ogre SDK来开发Windows屏幕保护程序,主要用C++和Win32。
  • 服务器应用开发:在Windows上专业编写服务器端软件几乎总是用C++。

不过,在这些应用领域中,我经常使用Python来编写工具、处理数据,通常是为了简化我的开发工作。以下几个例子可能是最好的方式来说明我通常如何使用Python:

  • 从现有网站抓取数据
  • 根据XML数据生成报告
  • 生成一组SQL查询,以根据其他数据格式填充数据库。
  • 解析整个C++项目,提取出一组独特的错误信息及其对应的错误代码。
  • 比较数据集,以找出我不小心丢失的数据。
  • 进行图像处理,为其他软件生成数据。

Python是一种非常强大和实用的语言,尽管我从未将其作为软件开发的主要语言,但我希望有一天能这样做。

4

我尽量选择使用Python,因为这是我知道的最有用、最高效的编程环境。

如果我遇到一些项目,Python不能直接使用或者不能完全用它来做(比如基于.NET的应用服务器),我通常会尽量多用Python。根据具体情况,这可能意味着:

  • 嵌入一个Python解释器
  • 使用Jython
  • 使用IronPython
  • 使用一些进程间通信机制(通常是http或套接字)来调用外部的Python进程
  • 导出数据 - 用Python处理 - 再导入数据
  • 用Python生成代码

这是我对之前一个问题的回答:我会C#,用Python会更高效吗?


根据我的经验,Python比C#让我更高效的原因有:

  • 它是一种动态语言。使用动态语言通常可以让你省去应用程序中的很多架构层。Python的动态特性让你能以更自然、更灵活的方式创建可重用的高级抽象,这在C#中比较难做到。
  • 库的丰富性。标准库和很多社区提供的开源库质量都很高。Python的应用范围很广,因此可用的库也很多。
  • 更快的开发周期。没有编译步骤意味着我可以更快地测试更改。例如,在开发网页应用时,开发服务器会检测到更改,并在文件保存时重新加载应用。从编辑器中运行单元测试只需按一个键,执行也非常迅速。
  • 常用功能的“易访问性”:列表、列表推导式、生成器、元组等等。
  • 语法不冗长。用Python创建一个基于WSGI的网页框架所需的代码行数比典型的.NET web.config文件要少得多:-)
  • 文档很好。有很多优秀的书籍。

10

我的座右铭是“能用Python就用Python,必须用C++时再用C++”。有一天我会找到机会在真实项目中用到Java、C#等语言,但到目前为止,我只在十多年前的一个Java 1.1的试点项目中用过这些语言。对于需要在用户浏览器中运行的代码,我会用Javascript(配合dojo),而需要在数据库服务器上运行的则用SQL。当然,在我开发的“普通”服务器和客户端上,C++和Python是我每天都在用的语言,这也是我在谷歌工作四年多以来的情况(谷歌的很多部分也在用Java,只是我没碰到过而已)。哦,对了,当我在处理Python核心和相关扩展时,也会用到纯C语言。

Python和C++都不是“严格的面向对象”(OO)语言,它们是多范式的,这也是它们在熟练掌握面向对象和其他编程范式(比如函数式、泛型、声明式等)的程序员手中强大的原因。我听说C#也吸收了一些这些特性(有时甚至超过C++,比如提供了lambda表达式),甚至Java也不得不在某种程度上接受一些(至少是泛型),所以很明显“一个尺寸适合所有人”并不成立——多范式编程依然活得很好!

C++(像C一样)让我必须小心控制所有内存(我们的内部C++风格指南禁止使用“智能指针”,因为那是垃圾回收的糟糕实现!),这大大增加了我的工作量,但也确保我在任何时候都不会多用一丝内存。因此,当内存紧张且珍贵时,C++(或在需要时使用C)是我的选择。否则,Python的极高生产力(如果你习惯Ruby或Javascript,它们也差不多)使得它更受欢迎。

我相信在两者之间确实存在一个小众语言的空间,比如像Java这样的语言,它是垃圾回收的但大部分是静态的(或者C#在开始增加越来越多的特性之前,听说4.0版本中还加入了一些动态特性),否则这些语言和相关语言不会如此普遍——不过我到现在为止还没有找到自己适合那个特殊小众的机会。

撰写回答