我是Python新手,来自C#背景,我正在努力加快速度。 我知道Python是动态类型的,而C#是强类型的。 - >看评论。在尝试学习Python时,我应该注意哪些概念障碍?是否存在Python中不存在模拟的概念?面向对象分析有多重要?
我相信这些以及你可能能想到的任何其他问题的答案会加速我对除了耐克心态(“只做它”)之外的Python的理解吗?
更多上下文:我的公司正在从ASP.NET C#Web Forms迁移到Django。我已经阅读了Django教程,这真的很棒。我需要在大约2周的时间内加速(很荒谬可能?大声笑)
感谢大家花时间和精力回答一个真正广泛的问题。
答案 0 :(得分:9)
“我知道Python是动态类型的,而C#是强类型的。”
这是奇怪的错误。
Python是强类型的。列表或整数或字典始终是给定类型。无法更改对象的类型。
Python变量不是强类型的。实际上,Python变量只是对象上的标签。变量未声明;因此将Python描述为“动态”。
C#是静态类型的。变量被声明为编译器的特定类型。代码是基于运行时使用的变量的某些知识生成的。
Python被“解释” - 事情在运行时完成 - 很少被假设。 [从技术上讲,Python源代码被编译成字节代码并解释字节代码。有些人认为这是一个重要的区别。]
编译C# - 编译器根据声明的假设生成代码。
在尝试学习Python时,我应该注意哪些概念障碍?
无。如果你坚持认为Python 应该就像其他东西一样;或者你坚持认为其他东西更直观然后你用不恰当的概念污染了你自己的想法。
没有编程语言有障碍。当我们将语言强加于语言时,我们会遇到自己的障碍。
Python中是否存在无模拟的概念?
由于Python具有面向对象,程序和功能元素,因此您很难找到Python中缺少的东西。
面向对象分析有多重要?
OO分析有助于软件开发的所有阶段 - 即使您没有进行OO实施。这与Python无关,应该是一个单独的问题。
我需要在大约2周的时间内加速(可能是荒谬的?)
也许不是。如果你从一个新的,开放的思想开始,那么Python可以在一周左右的勤奋工作中学习。
另一方面,如果您将Python与C#进行比较和对比,可能需要数年才能超越您的C#偏见并学习Python。不要将C#翻译成Python。不要将Python翻译成C#。
不要带满满的水桶去井里。
答案 1 :(得分:4)
我认为从python设置c#/ java的主要原因是通常不需要接口。这是因为python有ducktyping。
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
只要一个对象有方法quack就可以使用它来调用quacker。鸭子打字也使设计模式更容易实现。因为您不需要编写接口并确保对象的类型相同。
答案 2 :(得分:3)
C#和Python之间存在很多差异;而不是详述个体差异,最好只使用Dive Into Python等指南来了解Python的工作原理。请记住,虽然Python允许您很好地执行OOP,但它并不会限制您使用OOP。有时候只是简单的函数就足够了(Django视图就是一个很好的例子)。
WebForms和Django之间也存在许多概念差异。 Django与HTTP更加协调 - 客户端和服务器端发生的事情并没有混淆。对于典型的WebForms应用程序,客户端事件通常使用回发触发服务器端代码。即使使用ASP.NET Ajax框架,它也是一个提供比您有时需要的控制更少的环境。在Django中,使用例如客户端库实现相同的效果。 YUI或jQuery并自己调用Ajax。尽管这种方法与ASP.NET方法不同,但使用Django和Python可以提高后者的整体净积极性。 ASP.NET旨在使习惯于WinForms和其他桌面开发环境的开发人员更加熟悉;虽然这是微软采用的一种非常合理的方法(而且它们不是唯一的方法 - 例如,Java有JSF),但它与HTTP和REST并没有完全一致。有关此示例,请查看与Django URL相比,ASP.NET URL的约束(ASP.NET MVC之前)。
仅值2美分: - )
答案 3 :(得分:2)
你说Python是动态类型的,而C#是强类型的,但事实并非如此。强类型与弱类型以及静态与动态类型是对角线。强类型意味着str + int不会强制其中一个opperands,因此在这方面,Python和C#都是强类型的(而PHP或C是弱类型的)。 Python是动态类型的,这意味着名称在编译时没有定义的类型,而在C#中则是。
答案 4 :(得分:1)
概念差异很重要,但主要是它们如何导致不同的态度。
其中最重要的是“鸭子打字”。即,忘记什么类型的东西,你不需要关心。您只需要关心对象具有哪些属性和方法。 “如果它看起来像鸭子,像鸭子一样走路,它就是一只鸭子”。通常,这些态度的改变会在一段时间后自然而然地发生。
最大的概念障碍似乎是
显着的缩进。但是唯一讨厌它的人就是那些已经或者被迫与之合作的人,他们改变了编辑器标签扩展而不是默认的8。
没有编译器,因此在编译阶段没有类型测试。来自静态类型语言的许多人认为编译期间的类型检查发现了许多错误。根据我的经验,它没有。