从C语言转来,我该如何学习Python?
我对C语言掌握得不错,这是我学的第一门编程语言。我知道一些技巧和方法,也写过不少程序,主要是用于科学方面的。现在我想扩展一下,了解面向对象编程(OOP),而Python看起来是个不错的选择。
我看到过一些关于如何学习Python的问题,但大多数都是一些第一次接触编程的人问的。我不需要那种教我什么是字符串的教程,但我确实需要能告诉我如何在Python中创建字符串的教程。有没有推荐的好资源?如果资源是免费的,那就更好了 :)
7 个回答
我学会的所有关于Python的知识都是从官方文档上学来的:http://docs.python.org/
而且这个文档是免费的。
我在学Python之前就已经会C了。没有冒犯的意思,但我觉得你会C并不是那么重要。除非你读得特别慢,不然就直接去学Python吧。你熟悉的内容浏览一遍也不会花太长时间,而且针对C程序员的Python教程并不会让你成为更好的Python程序员——它只是可能以不同的顺序教你一些东西,并指出一些你在C中会做但在Python中不应该做的事情。
Python中的字符串其实和C中的字符串有些不同,使用方式也不一样。我强烈建议你从头开始学习字符串,而不是想着它们和C字符串的区别。首先,在Python 2中,最好不要用Python的“字符串”类来表示字符串:有一个单独的unicode字符串类,而在实际的Python应用中(几乎所有涉及用户数据的应用),你需要用到这个类。(Python 3解决了这个问题,使得str
类成为unicode字符串)。你需要建立一个良好的unicode/字节数据的工作习惯,以及解码/编码的能力。
学习第二种编程语言时,一个常见的错误是认为“我会编程,只需要把我在C中的做法翻译成Python就行”。其实并不是这样。虽然算法在不同语言中基本上可以是一样的,但在不同语言中做某件事的自然方式可能完全不同。如果你学会用Python的习惯来写代码,你的Python代码会更好,而不是试图像C程序员那样写Python。你在C中知道的很多“技巧”在Python中要么没用,要么适得其反。相反,很多在典型Python程序中应该愉快地做的事情,比如分配和释放大量内存,在C中你可能会考虑两次。部分原因是典型的C程序和典型的Python程序有不同的限制,部分原因是你在C中需要写更多的代码,花更多的心思才能把这些事情做好,而在Python中就简单多了。
如果你学习这门语言是因为你急需编写一个有Python但没有C的系统/平台,那么写一些像C程序那样的Python程序是一个合理的过渡措施。但这可能不适用于你,即使适用,这也不是最终目标。
因为你有C的经验,你可能会对Python/C API感兴趣。Python在很多方面都很棒,但它并不能提供科学应用中最快的计算核心(C可能也做不到,但我们暂时不讨论FORTRAN ;-))。所以如果你打算在Python中继续进行科学编程,而你的程序通常需要处理大量的数值运算(数十亿次操作),那么你可能想知道如何在需要时逃回C。不过,这应该被视为最后的手段。
不过,在Python/C API有意义之前,你需要对Python有相当的理解。
哦,对了,如果你想了解面向对象编程(OOP),记得之后看看Java、Objective-C、C++或D。Python不仅仅是一种面向对象的语言,它还是一种动态的面向对象语言。你可能从仅仅比较C和Python中没有意识到这一点,但动态类型和静态类型是与Python的面向对象特性完全独立的问题。Python对象就像哈希表,可以随意附加新字段,而许多其他面向对象语言中的对象则以更像C中的struct
的方式存储数据。