我的应用程序应该使用C#还是Python?

3
我有一个任务,需要开发一个应用程序来从远程REST服务中提取数据并生成Excel报告。该应用程序将由公司的少数用户(10-15)使用。数据负载可达10,000-200,000条记录。我一直在考虑是使用Python还是C#…
唯一考虑Python的原因是因为我熟悉它,并且这样做风险较小。
个人想尝试使用C#,因为这将是学习它的好机会。应用程序并不太复杂,所以学习它的额外负担不会太大… 我想。
对于这种类型的程序,C#是否存在任何问题需要我关注?用户运行Windows XP…用户没有安装.NET是否是一个重要问题?
提前感谢您的回答。
编辑: 我想强调一下,最终用户应该能够在不安装其他库/框架的情况下运行应用程序。

6
将“圣战”标签添加到你的问题中 :) - Oduvan
那我应该担心用户没有安装.NET吗?在我们公司,所有的Windows XP用户都安装了.NET吗? - lucks
你可以访问smallestdotnet.com网站,详细了解用户的现状和需求。 - John Gietzen
10个回答

12

为什么不使用IronPython,将这两个世界合并在一起呢?


5
如果你想学习C#,而且没有时间限制的话,现在是一个不错的时机。此外,虽然我没有用Python或C#处理过Excel文件,但我认为使用微软产品来处理Excel文件应该比使用Python更容易。不过,如果你只是将数据以CSV格式导出到文件中,那么Python或C#都可以胜任。
如果你想尝试更疯狂的事情,你可以使用IronPython,这样你就可以使用.NET资源,但仍然可以编写Python代码。

5
我认为使用IronPython并不疯狂!它是一个成熟的产品,可以完全与.NET Excel程序集互操作。在C# 3中,C#/Office互操作性相当繁琐:IPy的动态绑定和可选/命名参数等功能可能比使用C#更加容易!我觉得值得研究作为一种选择! - itowlson
1
Interop并不那么糟糕 - 至少在.NET之前的Office开发中不是。;-) 然而,Codeplex上有一个很好的包装器,我已经使用过它,它有一个更清晰的API:http://msofficefornet.codeplex.com/ - Joseph Ferris
1
虽然我没有 Python 的经验,但我做过相当多的 C# + Excel,这是你能找到的最不“自然”的 C# 代码之一(Interop 返回大多数未类型化的对象,函数签名由于 C# 中缺少可选参数而极为冗长……)。C# 确实非常适合实现所描述的目标,但从教育角度来看,这不是我会给出的第一个作业! - Mathias

2
我知道这是一篇旧文章,但我认为对于最近遇到此类问题的人来说,我有一些相关的信息。
Python库Openpyxl在我的桌面自动化脚本中对于操作和创建Excel文件非常有效。

http://openpyxl.readthedocs.io/en/default/usage.html

从我的理解来看,它直接访问文件,不像c#中的Interop技术。因此,无论在哪里运行,都不需要安装Excel。如果您想在服务器上获取某些内容,可能会出现获取经过许可的Excel副本或确保其存在的问题,如果用户在本地运行,则可能会出现此类问题。
使用C#,您可以利用Visual Studio的全部功能来编写代码,例如代码完成、调试工具和错误突出显示。但是,使用Python在Visual Studio中也可以实现大多数功能,尽管我发现尝试将正确版本的Python绑定到项目等方面更加复杂。
在C#中,您可以轻松编译可执行文件,而我认为您需要处理加载一些Python库才能获得与C#输出相当的本地可执行文件和依赖项。

2

通常我会说,用你所知道的

然而,在这里使用解释性语言可能会遇到一些性能问题。我个人会使用C#。如果你想学习它,现在是一个很好的时机

然而,如果你自己的成本/收益分析显示你最好使用python,那就用它吧。

在Windows上,C#需要.NET,但你可以使用.NET客户端框架使安装变得非常简单。


Python语言不仅被解释执行,而且还会编译为字节码,与C#允许的优化水平不同的是,数据的动态性质限制了Python语言的优化程度。 - RedGlyph
@RedGlyph:IronPython 可以编译。Python 是解释型的(官网上是这么说的)。 - John Gietzen
1
关于.NET框架的安装,它很可能已经安装了,但你应该检查一下安装的版本。我曾经有过一个不愉快的经历,因为我构建了一个针对.NET 3.5的项目,结果被告知“IT尚未验证.NET 3.5”。幸运的是,他们已经“验证”了.NET 2.0,并且我认为假设2.0通常都会存在是一个安全的选择 - 但是我很惊讶有多少人的机器上还没有安装3.5... - Mathias
1
@John:从技术上讲,按照那个定义,C# 也是解释型的。然而,这个定义与人们通常想到的脚本语言的定义不同。Python 在虚拟机上运行字节码,就像 Java 或 C# 一样。主要区别在于,存在将代码编译成其他虚拟机字节码的实现,并且 Python 模块可以按需编译,即动态编译。 - Alan Plum
为了增加灰度,C#通常也是即时编译的,就像一些Python的实现方式一样(例如Psyco, Laden-Swallow),这使得它们的性能更高。我不确定它们是如何实现Python的即时编译的(数据的动态性可能是个问题)。此外,有些处理器可以直接执行Java字节码,并且非常快速。 - RedGlyph
显示剩余6条评论

1

答案可能更多地与情况有关,而不是哪种语言更适合手头的任务。

如果你没有C#的经验,现在跳进去边学边做可能不是一个好主意。语法差异很容易学习,精通则需要了解其细节和如何利用语言的优势来完成工作。

如果你有足够的时间,并且重头开始不是问题,或者你有使用范式非常类似于C#(比如Java或C++)的语言的经验,那么你可能能够承担风险,并且很快适应新语言。

如果你不关心效率(例如,这是一个个人项目,你不太关心工作或效率根本不重要),尝试使用C#学习一些新东西(总是一件好事),或者坚持使用Python以确保你不必过多调整思维(总是源于漏洞和误解的来源)。

如果您一定要使用 C#,应该在“空闲时间”里(不一定是在家,最好是在工作时没有其他事情做的时候)玩弄它,从而建立一个你可以在实际项目中使用的技能集。这样,您就已经熟悉了该范例(宽泛使用此术语),并且在关键时遇到的问题会更少。


0

如果用户需要安装C#客户端,则没有安装.NET将是一个问题。您可以打包安装程序,使其下载.NET运行时,但根据您使用的功能,它可能是一个相当大的下载。

如果您的应用程序是基于Web的,则所有C#代码都在服务器上运行,并仅向浏览器提供HTML,因此是否安装.NET都不重要。


0

从C#与Excel的集成来看,这个问题似乎很简单。考虑到“仅限Windows”和“与Excel集成”,选择C#似乎更加合适。

而且,与Python相比,用户没有安装.NET框架并不是一个问题。.NET框架是Microsoft Update的标准部分。相比之下,Python几乎肯定不会出现在普通终端用户的计算机上。当然,在您的内部应用程序中,最后一点可能并不重要。


我不能只使用py2exe为最终用户编译可执行文件吗? - lucks
是的。我不确定py2exe是否与IronPython兼容,但IronPython Studio可以从脚本生成.exe文件。 - Nick T

0

如果您正在使用C#进行任何类型的HTTP工作,请确保查看WCF REST Starter Preview2中的新HttpClient库。请忽略该下载的名称,HttpClient部分可以独立于WCF使用。

它比仅使用HttpWebRequest更好。


0
如果您开发的是基于Web的应用程序,而客户机上没有安装.NET框架,这不会成为问题..但我想您可能不想同时尝试C#和Web开发。

0

使用Python从Web服务器获取数据、解析JSON或XML并生成某种报告非常容易。如果您需要真正好的Excel集成(例如,您的输出应该是包含多个图表的Excel电子表格),C#可能更好,但Python也是可行的;有PyExcelerator用于编写丰富的电子表格文件,还有Python支持COM,如果您想使用COM与Excel通信。

使用Python也非常容易制作独立的可执行文件,例如使用py2exe

这听起来像是一个批处理工具,没有GUI;如果我是您,我会用Python编写它,除非我真的想要一个有趣的项目来帮助我学习C#。但任何带有GUI的东西,C#可能更好。(我没有用Python进行GUI开发,但我在这里和其他地方看到过评论,Python GUI的性能往往较慢。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接