我学习、工作和使用Python已经有一年半的时间了。作为一名慢慢转向生物信息学的生物学家,这种语言一直是我在实验室所做的所有主要贡献的核心。我或多或少爱上了Python让我表达美丽的解决方案的方式,也爱上了这种语言的语义,它允许从思想到可行的代码的自然流动。
有一个问题,我很少在这里或其他论坛看到,我想听听你的回答。在我看来,这个问题对于任何走在Python改进道路上的人来说都很重要,但他不知道下一步应该做什么。
让我先总结一下我不想问的问题;)
我不想知道如何快速学习Python
我也不想找出熟悉这门语言的最佳方法
最后,我不想知道“一个技巧可以解决所有问题”的方法。
我想知道你的意见是:
从学徒到大师,你会向Python熟练者推荐哪些步骤,以便一个人不断提高,成为一个越来越好的Python程序员,一次一步。SO上的一些人几乎因为他们的Python能力而值得崇拜,请启发我们:)
我喜欢的那种回答(但请随意给读者惊喜:P),格式或多或少是这样的:
阅读这个(例如:python教程),注意那种细节
这么多时间/问题/行代码的代码
然后,读这本(例如:这本或那本书),但这次,注意这本
解决一些现实生活中的问题
然后,继续读取Y。
一定要掌握这些概念
X时间的代码
回到这样那样的基础或进一步讨论……
(你懂的)
我真的很想知道你对一个人在不同阶段应该注意什么问题的看法,以便不断进步(当然,要付出适当的努力)。如果你来自一个特定的专业领域,讨论一下你认为适合这个领域的道路。
编辑:感谢您的大力投入,我又回到了Python改进的轨道上!非常感谢!
(更深入地)理解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编程来帮助别人!!