从徒弟到专家

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

我想知道的是你对这个或其他论坛中很少见到的问题的回答。 这个问题对于我来说对于Python改进途中的任何人来说似乎都是重中之重,但是谁不知道他的下一步应该是什么。

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

  • 我不想知道如何快速学习Python
  • 我也不想找出熟悉这门语言的最佳途径
  • 最后,我不想知道“一举两得”的方法。
  • 我想知道你的意见是:

    你会推荐给一个Python熟练人员的步骤,从学徒到专家身份(随时随地停止,无论你的专业知识是什么),以便持续改进,成为一个更好,更好的Python编码器,一步一个脚印。 SO上的一些人几乎看起来值得他们的Python能力崇拜,请赐教:)

    我会喜欢的那种答案(但可以让读者感到惊讶:P)的格式或多或少是这样的:

  • 阅读这个(例如:python教程),注意那种细节
  • 代码如此之多/问题/代码行
  • 然后,阅读这个(例如:这本或那本书),但这一次,请注意这一点
  • 解决一些现实生活中的问题
  • 然后,继续阅读Y.
  • 一定要把握这些概念
  • 代码为X时间
  • 回到诸如此类的基础知识或进一步转向......
  • (你明白了:)
  • 我真的很在意在不同阶段知道你应该注意什么,以便持续地进步(当然是有适当的努力)。 如果您来自特定的专业领域,请在此领域讨论适当的路径。

    编辑:感谢你的伟大的输入,我回到了Python的改进轨道! 我真的很感激!


    我认为Python掌握的过程如下所示:

  • 发现列表解析
  • 发现生成器
  • 将地图,缩小,过滤器,iter,范围,xrange经常合并到您的代码中
  • 发现装饰者
  • 编写递归函数,很多
  • 发现itertools和functools
  • 阅读真实世界Haskell(在线阅读)
  • 用大量的高阶函数,递归和其他东西来重写所有旧的Python代码。
  • 每当他们向你展示一个Python类时,都要惹恼你的隔间。 声称它可以“更好地”作为字典加上一些功能来实现。 拥抱函数式编程。
  • 重新发现策略模式,然后再从Haskell之后很难忘记的命令代码中找到所有这些。
  • 找到一个平衡点。

  • 进一步掌握Python知识的一个好方法是深入研究已经使用的库,平台和框架的源代码。

    例如,如果你在Django上构建一个站点,可以通过查看Django如何实现相关功能来回答很多可能会影响你的问题。

    这样你将继续选择新的成语,编码风格和Python技巧 。 (有些会很好,有些会很糟糕。)

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

    多年来对这些小小澄清的积累导致对语言及其所有细节的深入理解。


    更深入地理解Python的数据类型及其与内存管理角色的关系

    正如社区中的一些人所知道的那样,我教Python课程,其中最受欢迎的课程是综合性的Intro + Intermediate课程以及引入各种应用程序开发领域的“高级”课程。

    很多时候,我会问一个类似于“我应该参加你的开场白还是高级课程?”的问题?我已经为Python编程了1 - 2年,而且我认为介绍对我来说太简单了,所以我会喜欢直接跳到先进的......你会推荐哪个课程?“

    为了回答他们的问题,我探讨了他们在这方面的强大程度 - 并不是说​​这是衡量他们是否已经准备好接受任何高级课程的最好方式,而是看他们的基本知识对于Python的对象有多好,以及内存模型,这是由不仅是初学者而是那些超越这些的人编写的许多Python错误的原因。

    要做到这一点,我将这些简单的两部分测验问题指向他们: Ex1:x = 42; Y = X; X + = 1; print x,y Ex2:x = [1,2,3]; y = x; x [0] = 4; print x,y

    很多时候,他们能够获得产出,但为什么更难以及更重要的回应......我将权衡输出作为答案的20%,而“为什么”获得80%的信用。 如果他们无法理解为什么,无论Python具有怎样的经验,我总是会引导人们进入全面的介绍+中级课程,因为我花了一个关于对象和内存管理的讲座,以便您能够用产出和充足信心的原因。 (仅仅因为在1 - 2年后你才了解Python的语法,并不能让你准备好超越“初学者”标签,直到你对Python的工作方式有了更好的理解。)

    接下来的询问需要类似的答案更加困难,例如,

    例3

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

    我建议的下一个主题是理解引用计数,了解“实习”意味着什么(但不一定使用它),学习浅层和深层副本(如上面的例子3),最后是各种类型之间的相互关系和语言中的构造,即列表与元组,列表与元组,列表解析与生成器表达式,迭代器与生成器等; 然而所有这些其他建议是另一个帖子。 希望这有助于在此期间! :-)

    PS。 我同意其他反馈,以获得更深入的反思,并研究其他项目的源代码,并为这两个建议添加强大的“+1”!

    PPS。 好的问题BTW。 我希望自己一开始就有足够的智慧来问这样的问题,但那是很久以前的事了,现在我正在尝试用我多年的全职Python编程来帮助其他人!

    链接地址: http://www.djcxy.com/p/7409.html

    上一篇: From apprentice to guru

    下一篇: Python Boolean Statement