Python与C#/.NET——在使用Python开发大型web应用程序时,需要考虑哪些关键区别?

2024-06-17 11:50:49 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

“.NET”不是一种语言。也许是Python vs.C#,或者Python/Django vs.C#/ASP.NET(或者选择任何你想要的“网络作品”;Python和“.NET”都有很多不同的解决方案,选择Django或MVC2可能会严重限制更好的可行方案)。作为Python对“.NET”的计数器:有IronPython(Python“in.NET”)

我会考虑:使用一种语言开发人员的舒适度,如果它们在Python和“.NET”中是相等的,那么我会考虑开发的周转时间,并选择将此最小化的语言/“webwork”(同样,它不必是以前的约束)。

虽然单元/集成测试是任何[规模]项目都必须进行的,但我发现,静态类型语言(C/F)可以大大减少与类型相关的“愚蠢错误”的数量。

开放比赛场地:-)

编辑评论:

那你只是在比较语言。

在这种情况下,C#是一种非常枯燥的命令式静态类型语言,只有一个基于继承/接口类的OO(但比Java更简洁的技巧,Java正处于石器时代)。这是与Python的基本OO类型相同的并且除去静态/动态位,两种语言都是强类型的(机制不同,但最终的结果在语言谱中非常相似)。实际上,python有MI,但在python中,这似乎不太被接受为使用'lambda'关键字,而且由于python是动态类型的,因此没有编译时支持来确定接口/类型契约(但是,有些模块试图提供这种支持)。

如果你能学习/了解Python,那么你就能学习/了解C#。这不是一种范式转换。这里有些关键字,那里有大括号,需要说明你在那里指的是什么类型,一个不同的基本库。。。不同的环境(您必须与某些环境抗争才能获得REPL,但在VS中是可行的)开发人员如何喜欢/学习/使用它是另一回事。虽然我以前确实调用过C#命令式,但很高兴看到添加了一些“类似函数”的特性,如LINQ/IEnumerable扩展和不带委托的闭包,即使基本C#语法非常程序化——再一次,非常像python(对于表达式、嵌套函数、语句/表达式除法)。

虽然新的“动态”确实模糊了界限(很少有好的用途——在几乎所有相同的地方,人们可能不得不回到以前的C#版本中的反射——这不是真的,但关键是它通常是“错误的方式”,除了在少数情况下恰好是“最好/唯一的方式”),“var”没有。也就是说,“var”变量的类型在编译时已知,与动态类型无关;它都是类型推断。一些语言,如F#/SML和Haskell,在保留静态类型的同时,具有更强大的类型推断,消除了“所有那些丑陋的类型声明”(尽管显式地注释允许的类型或类型集可以使意图更清晰)的需要。

就我个人而言,除了之外的所有东西,我都会使用静态类型语言。我不是说C(我也绝对不是说Java!),但静态类型语言可以将类型错误推到最上面,并需要预先显式的约定(这对我来说是一个巨大的胜利)。虽然你确实错过了一些简洁的动态技巧,但在目标语言中,几乎总是有更好的方法来执行相同的动作——你只需要用这种语言思考,用螺丝刀拧螺丝,用锤子钉钉子。E、 g.不要期望将依赖于(ab)使用local()或global()的Python代码按原样引入C。

在“底层”,大多数静态类型的语言(这里是C)首先需要显式编译(但这并不是很糟糕,因为它生成了漂亮的程序集),而像“REPL”这样的工具并不是一等公民(it是F#/VS2010的一等公民。另外,如果您有一个Python/C#的基本库(它在其他语言中不可用),这可能是为什么选择一种语言而不是另一种语言的决定因素。

我在Quora上写了一个非常全面的答案:How does Python compare to C#?

TL;DR

  • The answer is huge, but (hopefully) quite comprehensive. I programmed on C# / .NET for almost 10 years, so I know it really well. And I program on Python at Quora for ~ 7 months now, so I hope I know it pretty well.

  • Python is winner in: ease of learning, cross platform development, availability of open source libraries

  • C# is winner in: standard library, language features, development process and tools, performance, language evolution speed
  • Roughly even: syntax (Python is better in readability, C# has more consistent syntax), adoption.

我还建议,在进行这种移动之前,我们必须比较运行时,而不局限于语言特性。Python通过解释器CPython运行,在默认实现中,C#在CLR上运行。

多任务处理在任何大型项目中都非常重要;.NET可以通过线程轻松地处理这一问题。。。它还可以利用IIS(ASP.NET)中的工作进程。CPython没有提供真正的线程功能,因为GIL…每个线程在执行任何代码之前都必须获取一个锁,为了实现真正的多任务,必须使用多个进程。

当我们在单个工作进程上的IIS上托管ASP.NET应用程序时,ASP.NET仍然可以利用线程技术在不同的内核上同时服务多个web请求,而CPython依赖于多个工作进程在不同的内核上实现并行计算。

所有这些都引出了一个大问题,我们将如何在windows上托管Python/Django应用程序。我们都知道在windows上使用forking进程要比Linux昂贵得多。因此,理想情况下托管Python/Django应用程序;最好的环境是Linux,而不是windows。

如果您选择Python,开发和托管Python的正确环境将是Linux……如果您像我一样来自windows,选择Python也将引入Linux的新学习曲线……尽管现在不是很难。。。

相关问题 更多 >