Python进程路径-从学徒到大师

2024-03-28 18:11:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我学习、工作和玩Python已经一年半了。作为一名生物学家慢慢转向生物信息学,这种语言一直是我在实验室所做的所有主要贡献的核心,我或多或少地爱上了Python允许我表达漂亮解决方案的方式,也爱上了这种语言的语义,它允许从思想到可操作代码的自然流动。

我想知道的是你对一个我在这个论坛或其他论坛上很少见到的问题的回答。这个问题对我来说似乎是通往Python改进之路的核心,但谁会想知道他的下一步应该是什么。

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

  • 我不想知道如何快速学习Python
  • 我也不想找出了解这门语言的最佳方法
  • 最后,我不想知道“一招到位”的方法。

我想知道你的意见是:

对于一个Python熟练人员,从学徒到大师级的地位(无论你的专业知识如何规定,请随时停止),你会推荐哪些步骤,以便不断改进,成为一个越来越好的Python编码者,一步一步。一些这样的人似乎值得崇拜他们的Python能力,请启发我们:)

我喜欢的答案(但请随意给读者一个惊喜:p)格式大致如下:

  • 阅读本文(如:python教程),注意这类细节
  • 这么多时间/问题/代码行的代码
  • 然后,读这本书(如:这本或那本书),但这次,请注意
  • 解决一些现实问题
  • 然后,继续读Y
  • 一定要掌握这些概念
  • X时间代码
  • 回到这样或那样的基础或进一步。。。
  • (你明白了:)

我真的很想知道你对一个人在各个阶段应该注意什么的看法,以便不断地进步(当然,要付出应有的努力)。如果你来自一个特定的专业领域,讨论你认为在这个领域合适的路径。

编辑:感谢您的出色输入,我回到了Python改进的轨道上!我真的很感激!


Tags: 方法代码语言核心方式语义时间生物
3条回答

我以为掌握Python的过程是这样的:

  1. 发现list comprehensions
  2. 发现generators
  3. 经常将map, reduce, filter, iter, range, xrange合并到代码中
  4. 发现Decorators
  5. 写递归函数,很多
  6. 发现itertoolsfunctools
  7. 阅读Real World Haskellread free online
  8. 用大量高阶函数、递归等重写所有旧的Python代码。
  9. 每当你的同事向你展示一个Python类时,都会让你恼火。声称它可以作为字典和一些函数来“更好”实现。接受函数式编程。
  10. 重新发现Strategy模式,然后all those things从Haskell之后您试图忘记的命令式代码。
  11. 找到平衡点。

深入研究已经使用的库、平台和框架的源代码是加深您对Python知识了解的一个好方法。

例如,如果您正在Django上构建一个站点,那么可以通过查看Django如何实现所讨论的功能来回答许多可能使您困惑的问题。

这样,您将继续学习新的习惯用法、编码风格和Python技巧。(有些是好的,有些是坏的。)

当你在源代码中看到一些你不理解的Pythony时,跳到python IRC频道,你会发现很多“语言律师”乐于解释。

多年来,这些小小的澄清积累起来,使人们对这门语言及其所有的来龙去脉有了更深的理解。

了解(更深入地)Python的数据类型及其在内存管理方面的作用

正如社区中的一些人所知,I teach Python courses,最受欢迎的课程是综合介绍+中级课程以及介绍各种应用程序开发领域的“高级”课程。

经常有人问我一个类似的问题:“我应该上你的入门课还是高级课程?”?我已经为Python编程1-2年了,我认为简介对我来说太简单了,所以我想直接跳到高级。。。你会推荐哪门课?”

为了回答他们的问题,我调查他们在这方面有多强——这并不是衡量他们是否准备好接受任何高级课程的最好方法,而是了解他们对Python对象和内存模型的基本知识有多好,这是导致许多Python bug的原因,这些bug的作者不仅是初学者,而且是那些已经超越了这些的人。

为了做到这一点,我让他们回答这个简单的两部分测验问题: Ex1: x=42; y=x; x+=1; print x,y Ex2: x=[1,2,3];y=x;x[0]=4;print x,y

很多时候,他们都能得到输出,但是为什么是一个更困难和更重要的反应。。。当“为什么”得到80%的学分时,我会把结果称为答案的20%。如果他们不知道原因,不管他们有怎样的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

我建议的下一个主题是理解好引用计数,学习“interning”的含义(但不一定使用它),学习浅拷贝和深拷贝(如上面的例子3),最后是语言中各种类型和结构之间的相互关系,即列表与元组,dicts与集合,列出理解vs.生成器表达式、迭代器vs.生成器等;但是所有其他建议都是另一篇文章。希望这能帮上忙!:-)

另外,我同意其他人的回答,因为他们更善于反省,也更善于研究其他项目的源代码,并在这两个建议中加上一个强有力的“+1”!

是的。顺便说一句,这个问题问得很好。我希望我一开始就足够聪明,能够提出这样的问题,但那是很久以前的事了,现在我正努力帮助其他人完成我多年的全职Python编程!!

相关问题 更多 >