C#和Python之间的一些核心概念差异是什么?
我是Python新手,来自C#背景,我正在努力跟上进度。我知道Python是动态类型的,而C是强类型的。->见评论。在尝试学习Python时,我应该注意哪些概念上的障碍?Python中是否存在不存在模拟的概念?面向对象分析有多重要 我相信,对这些问题以及您可能想到的任何其他问题的回答都会加快我对Python的理解,除了Nike的思维(“只管去做”)之外 还有一点背景:我的公司正在从ASP.NETC#Web表单转移到Django。我已经看过了Django教程,它真的很棒。我需要在大约两周的时间内赶上进度(也许很可笑?哈哈)C#和Python之间的一些核心概念差异是什么?,c#,asp.net,python,django,programming-languages,C#,Asp.net,Python,Django,Programming Languages,我是Python新手,来自C#背景,我正在努力跟上进度。我知道Python是动态类型的,而C是强类型的。->见评论。在尝试学习Python时,我应该注意哪些概念上的障碍?Python中是否存在不存在模拟的概念?面向对象分析有多重要 我相信,对这些问题以及您可能想到的任何其他问题的回答都会加快我对Python的理解,除了Nike的思维(“只管去做”)之外 还有一点背景:我的公司正在从ASP.NETC#Web表单转移到Django。我已经看过了Django教程,它真的很棒。我需要在大约两周的时间内赶
感谢大家花时间和精力回答一个非常广泛的问题。C#和Python之间有很多不同之处;与其沉湎于个体差异,不如只看Python是如何使用指南工作的,例如。请记住,虽然Python允许您很好地执行OOP,但它并不限制您使用OOP。有时候,只有普通函数就足够了(Django视图就是一个很好的例子) WebForms和Django之间还有许多概念上的差异。Django与HTTP更为契合——在客户端和服务器端发生的事情之间没有混淆。对于典型的WebForms应用程序,客户端事件通常使用回发触发服务器端代码。即使使用ASP.NET Ajax框架,这种环境提供的控制也比您有时需要的少。在Django中,您可以使用客户端库(例如YUI或jQuery)实现同样的效果,并自己进行Ajax调用。尽管这种方法没有ASP.NET方法那么有效,但使用Django和Python时,您应该更高效,使后者成为一种全面的NET方法。ASP.NET的目标是让习惯WinForms和其他桌面开发环境的开发人员更加熟悉这些东西;虽然这是微软采取的一种完全合理的方法(而且不是唯一的方法——例如,Java有JSF),但它与HTTP和REST的协调程度并不相同。举个例子,看看与Django URL相比,ASP.NET URL的约束性(ASP.NET MVC之前)有多强
只有我2美分的价值:-)概念上的差异很重要,但主要在于它们如何导致不同的态度 其中最重要的是“鸭子打字”。忘记事情的类型吧,你不需要在意。您只需要关心对象具有哪些属性和方法。“如果它看起来像鸭子,走路像鸭子,那它就是鸭子”。通常,这些态度的改变会在一段时间后自然而然地发生 最大的概念障碍似乎是
只要对象有quack方法,就可以使用它调用quacker。Duck类型还使设计模式更易于实现。因为您不需要编写接口并确保对象的类型相同。您说过Python是动态类型的,而C#是强类型的,但事实并非如此。强类型与弱类型以及静态类型与动态类型是正交的。强类型意味着str+int不会强制使用其中一个opperand,因此在这方面Python和C#都是强类型的(而PHP或C是弱类型的)。Python是动态类型化的,这意味着名称在编译时没有定义的类型,而在C中是这样的。“我知道Python是动态类型的,而C是强类型的。” 这是非常错误的
学习Python时,我应该注意哪些概念上的障碍? 没有。如果你坚持Python应该像其他东西一样;或者你坚持认为其他东西更直观,而你用不恰当的概念污染了自己的思维 任何编程语言都没有障碍。当我们把事情强加在语言上时,我们会带来自己的障碍 Python中有没有类似的概念? 由于Python具有面向对象、过程和功能元素,您很难找到Python中缺少的东西 面向对象分析有多重要? OO分析有助于软件开发的所有阶段——即使您没有进行OO实现。这与Pyth无关
class Duck(object):
def quack(self):
print "quack"
class Cat(object):
"""Cat that specializes in hunting ducks"""
def quack(self):
print "quack"
duck = Duck()
cat = Cat()
def quacker(something_that_quacks):
something_that_quacks.quack()
quacker(cat) #quack
quacker(duck) #quack