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

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

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

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

我想知道你的意见是:

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

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

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

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

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


当前回答

I recommend starting with something that forces you to explore the expressive power of the syntax. Python allows many different ways of writing the same functionality, but there is often a single most elegant and fastest approach. If you're used to the idioms of other languages, you might never otherwise find or accept these better ways. I spent a weekend trudging through the first 20 or so Project Euler problems and made a simple webapp with Django on Google App Engine. This will only take you from apprentice to novice, maybe, but you can then continue to making somewhat more advanced webapps and solve more advanced Project Euler problems. After a few months I went back and solved the first 20 PE problems from scratch in an hour instead of a weekend.

其他回答

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

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

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

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

Discover list comprehensions Discover generators Incorporate map, reduce, filter, iter, range, xrange often into your code Discover Decorators Write recursive functions, a lot Discover itertools and functools Read Real World Haskell (read free online) Rewrite all your old Python code with tons of higher order functions, recursion, and whatnot. Annoy your cubicle mates every time they present you with a Python class. Claim it could be "better" implemented as a dictionary plus some functions. Embrace functional programming. Rediscover the Strategy pattern and then all those things from imperative code you tried so hard to forget after Haskell. Find a balance.

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

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

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

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

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

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

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

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

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

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

学习算法/数学/文件IO/ python优化

这不会让你成为专家,但开始时,尝试解决Project Euler问题 如果你有不错的高中数学,知道如何谷歌,前50个左右不应该征税。当你解决了一个问题,你就可以进入论坛,在那里你可以看到其他人的解决方案,这将教会你更多。但要体面,不要张贴你的解决方案,因为你的想法是鼓励人们自己解决问题。

如果您使用暴力算法,那么强迫自己使用Python将是不可原谅的。 这将教你如何在内存中布局大型数据集,并使用快速语言功能(如字典)有效地访问它们。

我从自己的经历中学到了:

文件输入输出 算法和技术,如动态规划 Python数据布局 字典/ hashmap 列表 元组 它们的各种组合,例如字典到元组列表 发电机 递归函数 开发Python库 文件系统布局 在解释器会话期间重新加载它们

还有很重要的一点

什么时候放弃使用C或c++ !

所有这些都应该与生物信息学相关

诚然,我并没有从那次经历中学到Python的面向对象编程特性。