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

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

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

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

我想知道你的意见是:

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

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

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

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

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


当前回答

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

其他回答

谷歌最近发布了一个在线Python类(“类”在“一门课程”中)。

http://code.google.com/edu/languages/google-python-class/

我知道这并不能完全回答你的问题,但我认为这是一个很好的开始!

你已经有了很多阅读材料,但如果你能处理更多,我建议你 通过阅读python增强建议来了解python的进化,特别是“完成”的pep和“延迟、放弃、撤回和拒绝”的pep。

通过了解语言的变化,所做的决定及其基本原理,您将吸收Python的哲学,并理解“地道的Python”是如何产生的。

http://www.python.org/dev/peps/

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

正如社区中的一些人所知道的,我教授Python课程,最受欢迎的是综合的入门+中级课程,以及介绍应用程序开发各个领域的“高级”课程。

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

为了回答他们的问题,我考察了他们在这方面的能力有多强——并不是说这真的是衡量他们是否准备好了任何高级课程的最佳方法,而是看看他们对Python对象和内存模型的基本知识有多好,这是导致许多Python错误的原因,这些错误不仅是初学者写的,而且是那些已经超越了这一点的人写的。

要做到这一点,我建议他们看看这个简单的测试问题:

Many times, they are able to get the output, but the why is more difficult and much more important of an response... I would weigh the output as 20% of the answer while the "why" gets 80% credit. If they can't get the why, regardless how Python experience they have, I will always steer people to the comprehensive intro+intermediate course because I spend one lecture on objects and memory management to the point where you should be able to answer with the output and the why with sufficient confidence. (Just because you know Python's syntax after 1-2 years doesn't make you ready to move beyond a "beginner" label until you have a much better understanding as far as how Python works under the covers.)

接下来的询问要求类似的答案就更难了,例如:

示例3

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

The next topics I recommend are to understanding reference counting well, learning what "interning" means (but not necessarily using it), learning about shallow and deep copies (as in Example 3 above), and finally, the interrelationships between the various types and constructs in the language, i.e. lists vs. tuples, dicts vs. sets, list comprehensions vs. generator expressions, iterators vs. generators, etc.; however all those other suggestions are another post for another time. Hope this helps in the meantime! :-)

ps.我同意其他的回答,即更深入地进行内省以及研究其他项目的源代码,并在这两个建议中添加一个强烈的“+1”!

pp。顺便说一句,问得好。我希望我一开始就足够聪明,问过这样的问题,但那是很久以前的事了,现在我正试图用我多年的全职Python编程来帮助别人!!

这不是你想要的,但我觉得这是个好建议。

学另一门语言,哪门都无所谓。每种语言都有自己的想法和习惯,你可以从中学习。了解语言之间的差异,更重要的是为什么它们不同。尝试纯函数式语言,如Haskell,看看函数的一些好处(和挑战),没有副作用。看看如何将从其他语言中学到的一些东西应用到Python。

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

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

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

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

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