Python成长路径 - 从初学者到大师

659 投票
19 回答
390808 浏览
提问于 2025-04-15 21:12

我已经学习、工作和玩弄Python一年半了。作为一名生物学家,我正在慢慢转向生物信息学,这门语言在我实验室的所有重大贡献中都起到了核心作用。我几乎爱上了Python,因为它让我能够表达出优美的解决方案,而且这门语言的语法也让我从思考到可用代码的过程变得非常自然。

我想知道的是你们对一个我在这个论坛或其他地方很少见到的问题的看法。这个问题对任何想提高Python水平的人来说都很重要,尤其是那些在思考下一步该怎么做的人。

让我先总结一下我不想问的问题;)

  • 我不想知道如何快速学习Python
  • 我也不想找出最好的方式来熟悉这门语言
  • 最后,我不想知道一个“万能的技巧”来解决所有问题。

我想知道的是你的看法:

你会推荐哪些步骤给一个Python初学者,让他从新手成长为高手(可以根据你的专业知识随意停下),以便不断提高,逐步成为更好的Python程序员。StackOverflow上的一些人几乎让人觉得值得崇拜,因为他们的Python技能,请给我们一些启发 :)

我希望得到的回答大致是这样的(当然你也可以给出意想不到的建议 :P):

  • 阅读这个(例如:Python教程),注意那些细节
  • 编写一定数量的代码/解决一定数量的问题
  • 然后,阅读这个(例如:这本书或那本书),但这次要关注这个
  • 解决一些实际问题
  • 接着,继续阅读Y。
  • 确保理解这些概念
  • 再编写X时间的代码
  • 回到某些基础知识,或者继续深入...
  • (你明白我的意思了 :)

我真的很想知道在不同阶段应该关注哪些内容,以便不断进步(当然需要付出努力)。如果你来自某个特定领域,请讨论一下你认为在这个领域合适的成长路径。

编辑:感谢你们的精彩建议,我又回到了Python提升的轨道上!我非常感激!

19 个回答

92

深入理解Python的数据类型及其在内存管理中的作用

大家好,作为社区的一员,有些人知道我在教授Python课程,其中最受欢迎的是综合性的入门+中级课程,还有一个“高级”课程,介绍各种应用开发领域。

我经常会被问到类似这样的问题:“我应该选你的入门课还是高级课?我已经编程Python 1-2年了,我觉得入门课对我来说太简单了,所以我想直接跳到高级课……你推荐哪个课程?”

为了回答这个问题,我会先了解他们在这方面的基础知识——虽然这并不是判断他们是否适合高级课程的最好方法,但我想看看他们对Python对象和内存模型的基本知识掌握得怎么样。这是很多Python错误的根源,不仅是初学者,还有一些已经学得更深入的人。

为此,我会给他们出一个简单的两部分测验题: Ex1: x=42; y=x; x+=1; print x,y Ex2: x=[1,2,3];y=x;x[0]=4;print x,y

很多时候,他们能得到输出结果,但理解为什么却比较困难,而这个“为什么”更重要。我会把输出结果的权重设为20%,而“为什么”的权重则是80%。如果他们不能解释“为什么”,无论他们有多少Python经验,我都会建议他们参加综合性的入门+中级课程,因为我会花一节课讲解对象和内存管理,确保他们能自信地回答输出结果和原因。(仅仅因为你在1-2年内学会了Python的语法,并不意味着你准备好超越“初学者”的标签,直到你对Python的底层工作原理有更深入的理解。)

另一个类似的问题更难,例如:

示例3

x = ['foo', [1,2,3], 10.4]
y = list(x) # or x[:]
y[0] = 'fooooooo'
y[1][0] = 4
print x
print y

接下来我推荐的主题是深入理解引用计数,学习“驻留”的含义(但不一定要使用它),了解浅拷贝和深拷贝(如上面的示例3),最后是理解语言中各种类型和结构之间的关系,比如列表与元组、字典与集合、列表推导式与生成器表达式、迭代器与生成器等等;不过这些其他建议可以留到下次再说。希望这些对你有帮助!:-)

ps. 我同意其他人的建议,深入了解自省以及研究其他项目的源代码,我对这两个建议都表示强烈支持!

pps. 顺便说一句,这个问题很好。我希望我在刚开始的时候能问出这样的问题,但那是很久以前的事了,现在我想用我多年的全职Python编程经验来帮助别人!!

108

想要更深入地了解Python,一个不错的方法就是研究你已经在使用的库、平台和框架的源代码。

比如说,如果你在用Django搭建网站,很多让你困惑的问题都可以通过查看Django是如何实现相关功能来找到答案。

这样你就能不断学习新的编程习惯、编码风格和Python的小技巧。(有些是好的,有些可能就不太好。)

当你在源代码中看到一些你不理解的Python写法时,可以去#python的IRC频道,那里有很多乐于助人的“语言律师”愿意为你解释。

这些小的澄清积累起来,经过几年后,你会对这门语言及其各种细节有更深刻的理解。

471

我觉得掌握Python的过程大概是这样的:

  1. 发现列表推导式
  2. 发现生成器
  3. 经常在代码中使用map、reduce、filter、iter、range、xrange这些函数
  4. 发现装饰器
  5. 写很多递归函数
  6. 发现itertoolsfunctools
  7. 阅读《现实世界中的Haskell》可以在线免费阅读
  8. 用大量的高阶函数、递归等重写你所有的旧Python代码。
  9. 每次同事给你展示Python类的时候都让他们烦恼。声称用字典加一些函数实现会“更好”。拥抱函数式编程。
  10. 重新发现策略模式,然后想起你在学习Haskell后努力想忘掉的那些命令式代码的东西。
  11. 找到一个平衡点。

撰写回答