如何学Python?
Posted on 2017年12月28日 by laixintao 21 Comments
很多人问过我“怎么开始学Python?”,“Python是什么”,“Python已经学了基础,如果进阶”。所以我打算整理一下我认为不错的学习资料,以后如果有人问我这些问题,就可以直接给他们推荐这个页面了。

本文档不定期更新。我碰到比较好的资源就会加进来。如果你是一个Python老手,知道一些这个文档没有列出的内容,欢迎在下面留言!

0.Python2 还是Python3
Python 3。

Python3版本(例如Python 3.6.4)是不兼容Python2的(最常见的Python2是Pyhton2.7,这是一个“长期支持版本”)这很不常见,因为一般的软件都是兼容老版本的。Python之所以兼容旧版本是因为Python旧版本有很多设计不好的地方,Python社区勇敢地重新设计了这些地方,使Python使用起来更好。但是为之付出的代价就是Python3代码无法兼容Pyhton2.但是近几年很多公司都在积极的向Python3迁移,比如Quora,Instagram。

使用新版本的Python可以体验Python很多不错的特性。大多数Python库都是支持Python3的。

Github上有一份不错Python3特性教程:arogozhnikov/python3_with_pleasure

1.零基础
我从来没有学过编程,该从哪里开始?

learnxinyminutes.com 是一个快速入门的网站,从域名就可以看出来,在Y分钟内学会X。其中Python的部分也不错,可以让你在5分钟之内体验一下Python的语法。
《learn-python3》Jupyter notebook 是一个基于 web 界面的交互解释器,这个仓库是一些代码片段,演示和学习 Python3.通过代码来学习可能成本更低一些。
《A byte of Python》是一个免费的在线书,可以下载PDF。适合零基础的人,从教你安装Python开始。给你介绍几本的一些概念,通过代码学习。
《廖雪峰的Python教程》同样面向零基础的读者。这种教程屏蔽了一些你初学的时候不需要了解的复杂细节,方便入门。但是最好尽早习惯查阅Python的官方文档。这是解决问题最有效的方法。
学习的时候可以结合 python tutor 这个在线工具,可以将数据结构可视化,容易理解。
字符串格式化是非常常用的操作,这个网站可以让你在5分钟内了解Python是如何格式化字符串的:https://pyformat.info 。
Python Web 开发指南 可以看下,有一些有价值的笔记和注意事项。
learn-python 用 Python 的 assert 的方式教你学 Python,类似一个 playground,不过需要懂 Python 的assert 和运行测试,也不算 0 基础吧,不过挺全面的。

2.进阶
我已经看完一些基本的入门教程,但是要自己写程序的时候要是一片空白,接下来该怎么做?

入门项目
不必担心,这几乎是每个人都会经历的。接下来可以去找一些简单的编程任务来做,例如在线题目(leetcode支持Python),或者尝试看一看一些简单的项目,例如:

howdoi 这是一个简单的命令行工具,只有一个文件,需要简单的一点入门知识就可以读懂。
requests 这是一个 HTTP 请求仓库,如果要写爬虫,几乎每天都要用它。可以用它来写一个简单的爬虫试试。这个项目的代码比起第一个稍稍复杂,但是花点时间也能看懂。
pylons 有很多与 web 相关的项目,都比较小巧,适合学习源代码。
agithub 是一个很简洁的 REST API 客户端,之前的版本只有 300 行代码,大量使用了 getattr 的特性,这个库的源代码值得一读,你会体会到 Python “动态” 的特性。
tinydb 这是用 Python 实现的一个小型的文档型(NoSQL)数据库,目前有 2000 行左右的代码,注释和文档也很丰富。核心思想就是用一个 Json 文件来保存数据,类似 SQLite。建议阅读一下源代码。
书籍资料
一些读物,最好对Python稍微了解之后再去读,但是并不要求很高深的知识:

《Python3 cookbook》这本书(其实所有叫 Cookbook 的书都是如此)的形式是:提出一个问题,提出一些问题的解决方案,讨论这些方案并延伸。所以对深入 Python 细节来说是不错的。
《Python的常见陷阱》 中文 En
《Python Guide》主要是介绍 Python 生态,比如说如何组织你的项目,如何使用 logging,如何编写测试,如何配置 CI/CD,用 Python 写 GUI 程序有哪些库可以使用等等,几乎是必读的资料。建议新手老手都看一遍,会有很大收获。
《Learning Python》这本书一直在更新,都已经有第五版了,推荐英文好的同学去读一读。此书涉及了很多Python的细节,非常啰嗦。也可以不读,直接去翻阅文档。
Python 3 Module of the Week 这个列表介绍了标准库以及简单用法,概括。适合快速阅读,熟悉标准库。
推荐读一下 Stack Overflow 关于 Python 问题。打开Python标签,按照Vote排序,会发现很多不错的回答。(这个宝贵资源是Risent告诉我的。)
这里有一份更详细的 FAQ,值得一读Stack Overflow 关于 Python 问题 。
啄木鸟社区有很多丰富的资源,上网冲浪!
Python 的官方 itertools 文档好好看一下,里面有很多线程的函数,如果有兴趣也可以去看一下源代码。如果你平时不怎么用这个库,那么写代码的时候就会多造很多轮子,而且往往有缺陷。
去 Follow 一些不错的资源,比如:
本博客右侧推荐的其他 Python 程序员的博客
Python weekly 每周周报
加入和你相关的邮件列表,看看大家都在讨论什么,推荐加入 python-dev 关注下 Python 语言的发展动态
Python 双下划线开头和结束的方法叫做 “dunder method”,这是 Python 鸭子类型的基础。仔细读一下这篇 A Guide to Python’s Magic Methods,遇到了更复杂的问题再去仔细读文档。
这里有一篇 Transforming Code into Beautiful, Idiomatic Python 看一下漂亮、Pythonic 的代码是怎么写的吧。

工具
我已经用Python在写一个项目了,有什么建议吗?

工欲善其事,必先利其器!推荐一下工具:

virtualenv 永远工作在虚拟环境中!在系统的Python环境中安装依赖可能会影响系统的稳定性。所以为每一个项目创建一个虚拟的Python环境是一个最佳实践!BTW, 依赖管理其实是每一个编程语言要解决的问题,Python 为什么有 virtualenv 呢?看一下这篇 How virtual environment libraries work in Python 你就明白啦。
virtualenvwrapper 一个上面工具的封装,可以让创建、激活、删除虚拟环境更加方便。
pipsi 安装命令行工具的时候,使用pipsi install 而不是 pip install 可以自动为你要安装的工具创建一个虚拟环境。这样你安装的工具不会产生“依赖黑洞”,并且保持系统Python的清洁。(现在这个项目已经不维护了,推荐使用 pipx )
学会打包Python package并发布到pypi,这里有一个例子可以参考:setup.py 。现在推荐使用 poetry 来打包了,更简单易用。
学会使用jupyter和ipython,这两个工具简直是神器!
读一下PEP 8,在自己的编辑器中加入lint检查,使自己写出的代码习惯PEP8.
Python的一个很大的优点就是生态系统非常好,你想要的东西可能早有包来实现了。所以动手之前务必先Google一下有没有现成的东西。以及,解决问题最好的地方是Python官方文档,其次是Google、github和stackoverflow,最后是邮件列表和论坛。在网上向别人提问注意礼貌。
3.深入理解
我的主要工作是Python,像深入理解一下Python,尤其是工作中不常用到的东西,例如asyncio,多线程等。

我推荐一些阅读资料:

《Fluent Python》,中文版《流畅的Python》也不错。这是我最喜欢的一本Python书!此书基本上是以讨论为主,深入了Python的方方面面。很多地方,比如协程,我看了很多资料都云里雾里,但是这本书一段话让我大彻大悟!而且此书经常介绍问题的渊源和典故,能了解到不少有趣的知识。还提供了很多链接,根据此书的指引,还能发现不少好资料。缺点就是在纸质书上印这么多链接有点反人类。
《Python并行编程》这是我正在翻译的一本书,还没有完成。这本书介绍了多线程、多进程、异步编程等话题,内容不深,而且都有示例代码。不过我的翻译水平有限,如果看到错误或者错字,麻烦告诉我一下。希望能在大年之前完成此书。
《Effective Python》介绍了高质量编写Python代码的技巧,值得一读。
看一看PEP的更新和Python社区的邮件列表,关注Python的发展动向
本博客的侧边栏有一些有关Python的链接,例如PyCoders weekly。还有一些Python工程师的博客,值得关注。
当然,我也写很多Python有关的内容。点击Python分类。

4.面试的准备
如果你正在找工作,可以看一下这些链接,如果这些问题你都理解并知道原理,找个好工作应该不难。

https://github.com/taizilongxu/interview_python
https://mp.weixin.qq.com/s/O47Oa8bAu9kJxYzXJcHuWw
http://www.wklken.me/posts/2015/08/26/python-some-test-questions.html
https://github.com/kenwoodjw/python_interview_question
5.FAQ
1.我在学习机器学习,有必要学习Python吗?

如果没有兴趣,可以不学。如果要用到numpy和scipy,可以通过它们的文档来学习。像numpy、scipy、flask、django这些框架,是有自己的一套设计的。你甚至可以理解为:这些Python是不同的东西。学习numpy(web框架也是)而不学习Python,我认为是可以的,遇到需要了解的Python有关的问题可以再去学习也不迟。

2.有必要使用Linux吗?

没有必要但是推荐使用Linux的命令行。我所有的工作内容都是在终端下完成的,终端相比于IDE更加高效,而且有很多awesome的工具。如果学会使用终端编辑器,你就不必为每种编程语言找到对应的 IDE 才能写的顺手,你可以用一把锤子敲遍世界上所有的钉子,并且并不是所有的文件编辑都有很好的 IDE 的,比如 Vagrantfile, Dockerfile, nginx.conf, yml, csv 等等,使用终端编辑器的话编辑什么都不会成为问题。还有,如果你想使用虚拟机或 VPS 来学习 Nginx 之类的东西,那么这是没有 GUI 的,终端编辑器可能是你唯一的选择。但是你也可以用windows或IDE,这些都不是强制的。但是一定要学会高效的解决自己遇到的问题,以及:了解你自己用的工具。比如PyCharm的调试技巧等。

3.为什么Python的for循环退出之后还能使用for循环定义的变量?

和其他语言不同,Python的代码块是没有作用域的,try-except代码块也没有。详见:《谈谈Python for循环的作用域》

4.为什么Python的字符串没有.length之类的属性或方法来获取长度而使用len()函数?

Python很多功能都是通过协议实现的。使用len(str)其实是调用了str.__len__方法。这样可以在中间做一些其他的处理。例如__getitem__就支持了描述器等特性。详见:http://lucumr.pocoo.org/2011/7/9/python-and-pola/

如何学Python?--捕蛇者说相关推荐

  1. 老齐学python的django 源代码_《跟老齐学Python:Django实战》真正的手把手“带”您学习...

    全书通过不断升级改造的方式,带着读者完成了一个"极其"简单的实战项目.这里说简单是相对于那些"大牛"而言.如果您是大牛,齐老师会建议您使用谷歌或者读官方英文文档 ...

  2. python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

    有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...

  3. 想转行学python过来人提醒大家几点

    因为目前python非常火,应用也非常广泛,是目前最火的行业之一,竞争很大,工资很高,未来发展也极好. 首先告诉你,零基础学习python难度还是有的,python的专业程度本身就不简单,学习这事本来 ...

  4. 从零开始学 Python 之运算符

    从零开始学 Python 之运算符 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  5. 学Python培训有什么用

    ​ Python在近几年的发展非常迅速,在互联网行业Python的薪资也越来越高,不少人开始准备学习Python技术,那么到底学Python培训有什么用呢?来看看下面的详细介绍. 学Python培训有 ...

  6. 学Python有哪些优势

    Python在人工智能领域应用是比较广泛的,近几年,越来越多的人对Python技术比较感兴趣,想要学习,那么具体学Python有哪些优势呢?我们来看看下面的详细介绍就知道了. 学Python有哪些优势 ...

  7. 学python培训到底能干嘛

    Python是在人工智能领域发挥着很重要的作用的,现在依旧有很多人对Python这项技术不是很了解,学Python培训到底能干嘛?下面小编来为大家做下详细的介绍. python其实并不难学,对于初学者 ...

  8. 学Python的好处有哪些?

    Python是一种比较简单的编程语言技术,想要快速进入到IT行业,Python是非常好的选择,为什么这么说呢?下面小编就为大家详细的介绍一下学Python的好处有哪些? ​ 学Python的好处有哪些 ...

  9. 零基础学python培训需要学习多久?

    Python是一种入门比较简单的编程语言,但是如果是零基础学员,学习起来还是需要时间的,那么零基础学python培训需要学习多久呢?我们来看看小编的详细介绍吧. 零基础学python培训需要学习多久? ...

最新文章

  1. 程序员级别鉴定书(.NET面试问答集锦)
  2. 巧用watch命令执行循环操作,来解放我们的双手
  3. boost::hana::insert用法的测试程序
  4. python 正则表达式语法大全_Python 之父撰文回忆:为什么要创造 pgen 解析器?
  5. C++ using的三种使用策略以及具体的用法
  6. Java基础入门笔记-整数+小数+字符串+打印
  7. ue4显示变量_UE4:快速入门蓝图(Blueprint)的方法之一
  8. 前端开发 容器标签 0226
  9. 【华为云技术分享】从 Cloud 1.0 到 2.0,云计算的“多元架构命题”
  10. js获取页面传来参数的方法
  11. linux diff 远程文件,登录diff命令,以单独的文件输出在linux
  12. java swing画三角形_如何使用Java Swing编写肮脏的渐变绘制边框
  13. 动手制作Dos、WinPE、Slax Linux|winpe+dos+Mini Linux U盘启动盘
  14. 循环队列 - 顺序存储结构
  15. mybatis-plus中的分页查询
  16. java 9 api_Java9 Process API
  17. wifi 小米pro 驱动 黑苹果_小米笔记本 pro 安装黑苹果
  18. php分解质因数,JavaScript趣题:分解质因数
  19. Word空格自动加下划线
  20. flutter ScrollController attached to multiple scroll views

热门文章

  1. 改变世界 VS 娱乐自己
  2. 海阳顶端网php,海阳顶端网的ASP木马的一个漏洞和利用
  3. storyboard 苹果启动图_iOS平台自定义storyboard启动界面
  4. 什么是内存屏障? Why Memory Barriers ?
  5. MicroLab专业的嵌入式开发调试工具集免费试用
  6. 编程爱好者网站试题中心
  7. docker下mysql主从搭建
  8. 【xbox开发】unity3d xbox one手柄键位
  9. 王者荣耀产品分析(本人不是产品,只是自己分析了一下)
  10. 盖茨接班人:微软产品为何总是挨批