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

有一个问题,我很少在这里或其他论坛看到,我想听听你的回答。在我看来,这个问题对于任何走在Python改进道路上的人来说都很重要,但他不知道下一步应该做什么。

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

我不想知道如何快速学习Python 我也不想找出熟悉这门语言的最佳方法 最后,我不想知道“一个技巧可以解决所有问题”的方法。

我想知道你的意见是:

从学徒到大师,你会向Python熟练者推荐哪些步骤,以便一个人不断提高,成为一个越来越好的Python程序员,一次一步。SO上的一些人几乎因为他们的Python能力而值得崇拜,请启发我们:)

我喜欢的那种回答(但请随意给读者惊喜:P),格式或多或少是这样的:

阅读这个(例如:python教程),注意那种细节 这么多时间/问题/行代码的代码 然后,读这本(例如:这本或那本书),但这次,注意这本 解决一些现实生活中的问题 然后,继续读取Y。 一定要掌握这些概念 X时间的代码 回到这样那样的基础或进一步讨论…… (你懂的)

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

编辑:感谢您的大力投入,我又回到了Python改进的轨道上!非常感谢!


当前回答

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

例如,如果您正在Django上构建一个站点,那么许多可能困扰您的问题都可以通过查看Django如何实现相关特性来解决。

通过这种方式,您将继续学习新的习语、编码风格和Python技巧。(有些是好的,有些是坏的。)

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

多年来这些小的澄清的积累导致了对语言及其所有来龙去脉的更深刻的理解。

其他回答

下载Twisted并查看源代码。他们采用了一些相当先进的技术。

查看Peter Norvig关于在10年内成为一名大师级程序员的文章:http://norvig.com/21-days.html。我敢打赌这对任何语言都适用。

def apprentice():
  read(diveintopython)
  experiment(interpreter)
  read(python_tutorial)
  experiment(interpreter, modules/files)
  watch(pycon)

def master():
  refer(python-essential-reference)
  refer(PEPs/language reference)
  experiment()
  read(good_python_code) # Eg. twisted, other libraries
  write(basic_library)   # reinvent wheel and compare to existing wheels
  if have_interesting_ideas:
     give_talk(pycon)

def guru():
  pass # Not qualified to comment. Fix the GIL perhaps?

理解自省

写一个dir()的等价函数 编写一个type()的对等体 弄清楚如何“打猴子补丁” 使用dis模块查看各种语言结构是如何工作的

做这些事

给你一些关于python如何实现的理论知识 在底层编程方面给你一些很好的实践经验 让你对python数据结构有一个很直观的感觉

我将给你一条我认为任何人都能给你的最简单、最有效的建议:代码。

你只能通过编写代码来更好地使用一门语言(这意味着理解它)。你必须积极地享受编码,受到启发,提出问题,并自己找到答案。

有一个小时的空闲时间吗?编写反转字符串的代码,并找出最优的解决方案。一个自由的夜晚?为什么不试试网络抓取呢?阅读别人的代码。看看他们是怎么做事的。问问你自己你会怎么做。

当我对我的电脑感到无聊时,我打开我的IDE和代码风暴。我记下那些听起来有趣、有挑战性的想法。URL缩短器?当然,我能做到。哦,我学会了如何将数字从一种进制转换为另一种进制,这是我的一个副作用!

无论你的技能水平如何,这都是有效的。永远不要停止学习。通过在业余时间积极地编写代码,你将不需要额外的努力就能理解这门语言,并最终成为一名大师。你将建立知识和可重用的代码和记忆习语。