欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

有一定的基础,如何学python?

程序员文章站 2022-06-06 09:48:43
...
各位好,我有一些python基础了。而且一直在做ruby on rails。但是我不喜欢ruby 因为它太灵活了,还是蛮喜欢python的,只少感觉他比较严禁。现在我是html css js都会,用django写了一个小blog,但是我觉得自己基础不好,想问下各位的意见,后面我该怎么学python?

回复内容:

以下内容基于我将近一年的Python学习经验,如果不足,欢迎给予扶正:

pre入门
Python作为一门“好上手”的编程语言,实在太好入门了,如果有C/C++/Java的经验,入门那是分分钟的事情。关于怎么入门的问题,知乎上已经有太多类似的问题了,而且,Python的wiki上还维护了一个BeginnersGuide页面,在此不作详细叙述。

需要达到的目标:
  1. 代码量5k以上。
  2. 熟悉常用coding convention,实践过PEP8。
  3. 熟悉Standrad Library(要求不高,会查文档就行)。
  4. 保持学习热情。

入门与深入
到这一步,读者应该对Python有一定程度的了解,至少已经把教材刷过一遍,可以写一点简单的代码,例如在Django框架下写个小博客什么的(题主的提问reuse,get!)。在这个时候就应该对官方的document进行一次深入的学习,查缺补漏,追根溯源。以下是我采用的策略:
  1. 快速扫一遍tutorial。如基础扎实可跳过这一步骤。
  2. 阅读Language Reference中的Data model。注意了,需要同时阅读Python 2与3的Data model,以了解2与3的区别。在这一步中需要搞清楚Python Data Model中的细节,如attribute accessing的机制,special method的含义,descriptor的细节,method creating的场景与过程等。需要注意的是,官方文档中对new-style class的讲解可能有点晦涩,如果出现阅读障碍,可以尝试阅读New-style Classes列表中的资料。
  3. 相信有了第2步积累,你对Python中的Object已经有了较为深入的了解。这时候你需要继续阅读Language Reference的其余部分,以对Python的语言的细节进行更加深入的学习。
  4. 回顾Language Reference,把其中出现的PEP documents扫一遍。

完成上面的步骤,基本上就算是入门Python了,在Python的语法层面上应该不会遇到大的问题了,而且遇到问题也至少知道怎么解决问题了。下面就是大量阅读Python的相关资源了,以下是我的建议:

  • Python Documentation Index中的Additional documentation小节。
  • Python Cookbook(2rd for Py2 and 3rd for Py3)。

于此同时,代码量要提上去。pypi.python.org/pypi提交你的Package吧!


研究

  • 研究Python大型开源项目源代码。
  • 研究CPython的编码实现,可从Python C API开始。
  • Coding! Coding!
  • ...(不行我已经编不下去了,现在我还处在刷reference/pep doc的阶段)

感谢你的阅读,如有用,请点赞;如无用,请喷之!

《简明 Python 教程》:简明 Python 教程
(英文原名为A Byte of Python: swaroopch.com/notes/pyt)

我实在很难想象有比这本书更合适的入门教程。100页左右,覆盖了Python最重要的主线知识点,几乎没有一句废话。
代码熟练工大约3、4个小时就可以收工,成就感斐然!
(书中末尾给出了深入学习Python的方案,欢迎继续升级!)

---------------------------------------------------------------------------------------------------------------------------

我自己自学Python的时候走了两次弯路。

1. Learn Python the Hard Way
2. Dive into Python


第一种方法花费的时间长,成效慢,而且没有实效性的学习(你只是学了来用啊,不是为了学而学啊)让人难以坚持。给人的感觉就像是中国农民几千年的生活和耕作总结出了的经验,最后发现外国研究者几个月或几年的抽象归纳得出了同样的结论。

第二种方法,Dive into Python是一本好书无须置疑,十分仔细和明了,但坏就坏在太多细节。对于入门者最重要的是一整个框架的知识,然后在不断实践中补充细节。就像拿着一本C++ Primer来入门C++我不知道你会有什么感觉(当然这本书远没Primer这么变态)。

---------------------------------------------------------------------------------------------------------------------------

这是中文翻译译者 沈洁元 先生的原话:
Swaroop C. H.的这本书是我学习Python时的第一本教材。
它简单明晰,可以在最短的时间内把你领进Python的世界。
它不是很长,但是覆盖了几乎所有重要的Python知识。在第一次读本书的时候,我就深切的感到这是给Python初学者的一本极佳教材,应该是每一位Python初学者的第一本教材。

欢迎你加入Python的世界! 本人才疏学浅,学识大多浅尝辄止,故文章若有错误,不论是文字笔误还是理解有错,烦请您留言以告知,本人必定感激不尽!

**Python分类下的系列文章,不断更新中,如果你迫不及待地想要看看写得如何可以先试试这篇[Python Algorithms - C4 Induction and Recursion and Reduction](hujiaweibujidao.github.io),如果觉得好久留言点个赞呗,如果觉得不好那就直接关掉这个博客网站吧,嘿嘿**

**[感谢@Google爱好者给该系列的命名,我很喜欢,叫做“码农与蛇的故事”]**

1.Python基础知识篇

[Python Basics](hujiaweibujidao.github.io) 和 [Python Advances](hujiaweibujidao.github.io)

前者是Python基础的简单总结(大部分摘自[网上恩师@廖雪峰老师的Python教程](liaoxuefeng.com/wiki/00)),后者推荐了些关于Python高级特性的好文章(大部分摘自[伯乐在线Python分类的文章](blog.jobbole.com/catego))

2.Python数据结构篇

数据结构篇主要是阅读[Problem Solving with Python](interactivepython.org/c) [该网址链接可能会比较慢]时写下的阅读记录,当然,也结合了部分[算法导论](en.wikipedia.org/wiki/I)中的内容,此外还有不少wikipedia上的内容,所以内容比较多,可能有点杂乱。这部分主要是介绍了如何使用Python实现常用的一些数据结构,例如堆栈、队列、二叉树等等,也有Python内置的数据结构性能的分析,同时还包括了搜索和排序(在算法设计篇中会有更加详细的介绍)的简单总结。每篇文章都有实现代码,内容比较多,简单算法一般是大致介绍下思想及算法流程,复杂的算法会给出各种图示和代码实现详细介绍。

**这一部分是下面算法设计篇的前篇,如果数据结构还不错的可以直接看算法设计篇,遇到问题可以回来看数据结构篇中的某个具体内容充电一下,我个人认为直接读算法设计篇比较好,因为大家时间也都比较宝贵,如果你会来读这些文章说明你肯定有一定基础了,后面的算法设计篇中更多的是思想,这里更多的是代码而已,嘿嘿。**

(1)[搜索](hujiaweibujidao.github.io)

简述顺序查找和二分查找,详述Hash查找(hash函数的设计以及如何避免冲突)

(2)[排序](hujiaweibujidao.github.io)

简述各种排序算法的思想以及它的图示和实现

(3)[数据结构](hujiaweibujidao.github.io)

简述Python内置数据结构的性能分析和实现常用的数据结构:栈、队列和二叉堆

(4)[树总结](hujiaweibujidao.github.io)

简述二叉树,详述二叉搜索树和AVL树的思想和实现

3.Python算法设计篇



算法设计篇主要是阅读[Python Algorithms: Mastering Basic Algorithms in the Python Language](link.springer.com/book/)[**点击链接可进入Springer免费下载原书电子版**]之后写下的读书总结,原书大部分内容结合了经典书籍[算法导论](en.wikipedia.org/wiki/I),内容更加细致深入,主要是介绍了各种常用的算法设计思想,以及如何使用Python高效巧妙地实现这些算法,这里有别于前面的数据结构篇,部分算法例如排序就不会详细介绍它的实现细节,而是侧重于它内在的算法思想。这部分使用了一些与数据结构有关的第三方模块,因为这篇的重点是算法的思想以及实现,所以并没有去重新实现每个数据结构,但是在介绍算法的同时会分析Python内置数据结构以及第三方数据结构模块的优缺点,也就意味着该篇比前面都要难不少,但是我想我的介绍应该还算简单明了,因为我用的都是比较朴实的语言,并没有像算法导论一样列出一堆性质和定理,主要是对着某个问题一步步思考然后算法就出来了,嘿嘿,除此之外,里面还有很多关于python开发的内容,精彩真的不容错过!

这里每篇文章都有实现代码,但是代码我一般都不会分析,更多地是分析算法思想,所以内容都比较多,即便如此也没有包括原书对应章节的所有内容,因为内容实在太丰富了,所以我只是选择经典的算法实例来介绍算法核心思想,除此之外,还有不少内容是原书没有的,部分是来自算法导论,部分是来自我自己的感悟,嘻嘻。该篇对于大神们来说是小菜,请一笑而过,对于菜鸟们来说可能有点难啃,所以最适合的是和我水平差不多的,对各个算法都有所了解但是理解还不算深刻的半桶水的程序猿,嘿嘿。

本篇的顺序按照原书[Python Algorithms: Mastering Basic Algorithms in the Python Language](link.springer.com/book/)的章节来安排的(章节标题部分相同部分不同哟),为了节省时间以及保持原著的原滋原味,部分内容(一般是比较难以翻译和理解的内容)直接摘自原著英文内容。

**1.你也许觉得很多内容你都知道嘛,没有看的必要,其实如果是我的话我也会这么想,但是如果只是归纳一个算法有哪些步骤,那这个总结也就没有意义了,我觉得这个总结的亮点在于想办法说清楚一个算法是怎么想出来的,有哪些需要注意的,如何进行优化的等等,采用问答式的方式让读者和我一起来想出某个问题的解,每篇文章之后都还有一两道小题练手哟**

**2.你也许还会说算法导论不是既权威又全面么,基本上每个算法都还有详细的证明呢,读算法导论岂不更好些,当然,你如果想读算法导论的话我不拦着你,读完了感觉自己整个人都不好了别怪小弟没有提醒你哟,嘻嘻嘻,左一个性质右一个定理实在不适合算法科普的啦,没有多少人能够坚持读完的。但是码农与蛇的故事内容不多哟,呵呵呵**

**3.如果你细读本系列的话我保证你会有不少收获的,需要看算法导论哪个部分的地方我会给出提示的,嘿嘿。温馨提示,前面三节内容都是介绍基础知识,所以精彩内容从第4节开始哟,么么哒 O(∩_∩)O~**

(1)[Python Algorithms - C1 Introduction](hujiaweibujidao.github.io)

本节主要是对原书中的内容做些简单介绍,说明算法的重要性以及各章节的内容概要。

(2)[Python Algorithms - C2 The basics](hujiaweibujidao.github.io)

**本节主要介绍了三个内容:算法渐近运行时间的表示方法、六条算法性能评估的经验以及Python中树和图的实现方式。**

(3)[Python Algorithms - C3 Counting 101](hujiaweibujidao.github.io)

原书主要介绍了一些基础数学,例如排列组合以及递归循环等,但是本节只重点介绍计算算法的运行时间的三种方法

(4)[Python Algorithms - C4 Induction and Recursion and Reduction](hujiaweibujidao.github.io)

**本节主要介绍算法设计的三个核心知识:Induction(推导)、Recursion(递归)和Reduction(规约),这是原书的重点和难点部分**

(5)[Python Algorithms - C5 Traversal](hujiaweibujidao.github.io)

**本节主要介绍图的遍历算法BFS和DFS,以及对拓扑排序的另一种解法和寻找图的(强)连通分量的算法**

(6)[Python Algorithms - C6 Divide and Combine and Conquer](hujiaweibujidao.github.io)

**本节主要介绍分治法策略,提到了树形问题的平衡性以及基于分治策略的排序算法**

(7)[Python Algorithms - C7 Greedy](hujiaweibujidao.github.io)

**本节主要通过几个例子来介绍贪心策略,主要包括背包问题、哈夫曼编码和最小生成树等等**

(8)[Python Algorithms - C8 Dynamic Programming](hujiaweibujidao.github.io)

**本节主要结合一些经典的动规问题介绍动态规划的备忘录法和迭代法这两种实现方式,并对这两种方式进行对比**

(9)[Python Algorithms - C9 Graphs](hujiaweibujidao.github.io)

**本节主要介绍图算法中的各种最短路径算法,从不同的角度揭示它们的内核以及它们的异同** 不得不承认Python还是个小众的语言,虽然国外应用广泛,但是国内资料还是比较少,楼主说用Django写的小Blog是Django by Example里的例子吧!不过一般做完这一个就再也不想看这个教程了,因为这个教程他自己封装了很多通用视图,让本来就很难懂的基于类的视图更加的抽象了。我觉得官方文档的例子做完了之后(1.5的中文版是5节,1.6的英文版现在是6节),可以去学习:How to Tango with Django: A Python Django Tutorial这本书。
这本书有3个好处,第一它用一个大的项目实例,使用10个章节讲解各个部分,可以充分的让学习者了解Django开发的每个环节。并且对于官方文档有大量的引用,可以帮助读者熟悉官方文档的结构(我不会说Django官方文档打印成PDF有1300多页,而那个官方例子只占很小的部分~熟悉这些文档是一个很耗时的工作)。
第二个好处是,这本书视图部分只适用了基于函数的视图,以及一些快捷方式(这种项目构建方法也是官方文档前3节所做的,之后在第四节对项目重构时才使用的通用视图,从这一点来说,基于类的视图确实不容易理解。),这种方式对于Django来说更加的底层,可以从代码上直观的体现出,视图部分对于模型数据的处理,以及如何渲染模板,有助于加深理解Django的MTV模式。我在初学时做了两遍官方范例,看了好些通用视图模块才搞清楚通用视图到底做了什么。虽然模型也封装了ORM(对象关系映射),但毕竟我们可以手动查询数据库的内容,而且Django还提供QuerySet用来查询数据库,相比来说模型的部分不算难理解。通用视图真是不看源码还真不好弄懂,所以在初学时先搁置通用视图,而至使用基于函数的视图是一种这种的好办法,等熟悉了视图的工作原理在重构也不难。
第三个好处是这本书拓展了,Django的功能,比如增加搜索引擎支持,引入bootstrap前端框架,讲解jQuery和JAJX,讲解South(数据库迁移),这些东西都是web开发中会遇到的事情,最后书还预告了下一版会增加测试驱动的开发,并且提前给出了主要参考文献,也指引了读者继续学习的方向。
我强烈推荐学习本书,我学过之后受益匪浅,如果对于官方文档的范例已经很熟悉了,可以跳过前3章,从第四章,甚至第五章开始,会节约一些阅读时间,虽然数是英文的,但并不算长,我只花了2-3天就读完了~还做完了里面的示例程序~

Python的官方文档质量非常好。篇幅适中,示例清晰,我觉得Python能被广泛运用有这一份功劳。所以说想学就看官方文档好了,看完之后你自己就知道往后怎么办了。

多看
看文档,看源码
多写
不断给你那个小blog加功能,尝试加各种模块、插件、工具,不是为了这个blog,而是为了练习 动不动就端上标准库的源代码,大家简直太牛了。我反正是做不到。

支持@张广怡 提到的《简明 Python 教程》
此外隆重推荐一个历史悠远的python闯关游戏,the python challenge
The Python Challenge
这是我能说我掌握并且喜欢上了Python的理由。 Python的官方文档质量非常好。篇幅适中,示例清晰,看完之后你自己就知道往后怎么办了。Python培训这里有教学视频,推荐一下。 语言只是工具,不是很难的。孰能生巧,建议平时多加练习,重要的是实际项目,在实际项目中锻炼,这个成长是最快的。
推荐python学习网站:pythontab.com
python社区: bbs.pythontab.com 边看书边练习,应该学得快,推荐一本好书:
Programming Python, 4th Edition Free Download