“.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#的基本库(它在其他语言中不可用),这可能是为什么选择一种语言而不是另一种语言的决定因素。