代码之家  ›  专栏  ›  技术社区  ›  Aaron Silverman

Python与C#/.NET-使用Python开发大型web应用程序时,需要考虑的关键区别是什么?

  •  54
  • Aaron Silverman  · 技术社区  · 16 年前

    让我先这么说 我意识到这两种技术都能很好地发挥作用,我正在寻找关键的区别点(以及相关的优缺点) 这些语言有很多共同点,但也有很多不同之处——我想听听你对它们关键区别的看法。

    我正在寻找的权衡/差异化示例:

    虽然看起来您可以用更少的代码完成更多的任务,并且可以用Python更具创造性,但是由于.NET的结构更为结构化,因此可以更容易地理解和修改其他人编写的代码。

    使用python我们将走Django路线,使用.NET我们将使用MVC2。我们的服务器是运行IIS的windows服务器。

    我们喜欢ColdFusion的一些地方包括,它非常容易处理查询,而且我们可以“热部署”修复到我们的web服务器,而不必重新启动它们或中断它们上的任何人。


    我读过其他一些涉及这两种语言的X vs Y线程,发现它们非常有用,但我想直接将Python与.Net进行正面比较。提前感谢你让我利用你的经验来解答这个难题!

    4 回复  |  直到 16 年前
        1
  •  43
  •   user166390 user166390    16 年前

    “.NET”不是一种语言。也许是Python对C#,或者Python/Django对C#/ASP.NET(或者选择任何你想要的“webwork”;Python和“.NET”都有很多不同的解决方案,选择Django或bat的MVC2可能会严重限制更好的可行选项。作为Python与“.NET”的反例:有 IronPython

    我会考虑:

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

    打开游戏场地:-)

    编辑以供评论:

    那你只是在比较语言。

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

    如果你能学会Python,那么你就能学会C。

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

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

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

        2
  •  30
  •   Community Mohan Dere    6 年前

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

    热释光;博士

    • Python在以下方面是赢家:易学性、跨平台开发、开放源码库的可用性

    • 大致相等:语法(Python的可读性更好,C的语法更一致),采用。

        3
  •  6
  •   Faraz M. Khan    11 年前

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

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

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

        4
  •  3
  •   Anmol Gautam    7 年前

    工业中的主要问题是python的动态特性。 因为使用静态类型语言有某种安全性。

    但现在我们有了像PyCharm这样的现代ide。当您输入代码时,它们集成了pylint和pep8“代码检查”和“样式向导检查”。这就消除了最愚蠢的错误。所以你现在在python中几乎有了同样的安全性。

    当你需要的时候。这就是python的实用本质。

    GIL是个问题,但是可以使用gevent或ZMQ来执行某种线程。但PyPy-STM的研究仍在进行中。

    Python几乎可以在任何地方运行,您可以选择不同的运行时,大部分是兼容的(Wikipedia上有12个) Wikipedia python interpreter list