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

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

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

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

我想知道你的意见是:

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

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

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

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

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


当前回答

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

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

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

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

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

还有很重要的一点

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

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

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

其他回答

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?

使用Python尝试http://challenge.greplin.com/

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

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

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

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

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

如果你在科学中使用python(看起来你是这样),其中的一部分将是学习和理解科学库,对我来说,这些将是

numpy scipy matplotlib mayavi / mlab 查科 Cython

了解如何使用正确的库和向量化代码对于科学计算是至关重要的。

我想补充一点,用常见的python方式(面向对象的方法、列表、迭代器)处理大型数字数据集的效率非常低。在科学计算中,有必要以与大多数常规python编码员处理数据的方式截然不同的方式构建代码。

理解自省

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

做这些事

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