如何学Python?

很多人问过我“怎么开始学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迁移,比如QuoraInstagram

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

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

1.零基础

我从来没有学过编程,该从哪里开始?

  1. learnxinyminutes.com 是一个快速入门的网站,从域名就可以看出来,在Y分钟内学会X。其中Python的部分也不错,可以让你在5分钟之内体验一下Python的语法。
  2. A byte of Python》是一个免费的在线书,可以下载PDF。适合零基础的人,从教你安装Python开始。给你介绍几本的一些概念,通过代码学习。
  3. 廖雪峰的Python教程》同样面向零基础的读者。这种教程屏蔽了一些你初学的时候不需要了解的复杂细节,方便入门。但是最好尽早习惯查阅Python的官方文档。这是解决问题最有效的方法。
  4. 学习的时候可以结合 python tutor 这个在线工具,可以将数据结构可视化,容易理解。
  5. 字符串格式化是非常常用的操作,这个网站可以让你在5分钟内了解Python是如何格式化字符串的:https://pyformat.info

2.进阶

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

入门项目

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

  1. howdoi 这是一个简单的命令行工具,只有一个文件,需要简单的一点入门知识就可以读懂。
  2. requests 这是一个 HTTP 请求仓库,如果要写爬虫,几乎每天都要用它。可以用它来写一个简单的爬虫试试。这个项目的代码比起第一个稍稍复杂,但是花点时间也能看懂
  3. pylons 有很多与 web 相关的项目,都比较小巧,适合学习源代码
  4. agithub 是一个很简洁的 REST API 客户端,之前的版本只有 300 行代码,大量使用了 __getattr__ 的特性,这个库的源代码值得一读,你会体会到 Python “动态” 的特性

书籍资料

一些读物,最好对Python稍微了解之后再去读,但是并不要求很高深的知识:

  1. Python3 cookbook》这本书(其实所有叫 Cookbook 的书都是如此)的形式是:提出一个问题,提出一些问题的解决方案,讨论这些方案并延伸。所以对深入 Python 细节来说是不错的。
  2. 《Python的常见陷阱》 中文 En
  3. Python Guide》主要是介绍 Python 生态,比如说如何组织你的项目,如何使用 logging,如何编写测试,如何配置 CI/CD,用 Python 写 GUI 程序有哪些库可以使用等等,几乎是必读的资料。建议新手老手都看一遍,会有很大收获。
  4. 《Learning Python》这本书一直在更新,都已经有第五版了,推荐英文好的同学去读一读。此书涉及了很多Python的细节,非常啰嗦。也可以不读,直接去翻阅文档。
  5. Python 3 Module of the Week 这个列表介绍了标准库以及简单用法,概括。适合快速阅读,熟悉标准库。
  6. 推荐读一下 Stack Overflow 关于 Python 问题。打开Python标签,按照Vote排序,会发现很多不错的回答。(这个宝贵资源是Risent告诉我的)
  7. 这里有一份更详细的 FAQ,值得一读 http://effbot.org/pyfaq/
  8. 啄木鸟社区有很多丰富的资源,上网冲浪!

工具

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

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

  1. virtualenv 永远工作在虚拟环境中!在系统的Python环境中安装依赖可能会影响系统的稳定性。所以为每一个项目创建一个虚拟的Python环境是一个最佳实践!
  2. virtualenvwrapper 一个上面工具的封装,可以让创建、激活、删除虚拟环境更加方便。
  3. pipsi 安装命令行工具的时候,使用pipsi install 而不是 pip install 可以自动为你要安装的工具创建一个虚拟环境。这样你安装的工具不会产生“依赖黑洞”,并且保持系统Python的清洁。
  4. 学会打包Python package并发布到pypi,这里有一个例子可以参考:setup.py
  5. 学会使用jupyter和ipython,这两个工具简直是神器!
  6. 读一下PEP 8,在自己的编辑器中加入lint检查,使自己写出的代码习惯PEP8.
  7. Python的一个很大的优点就是生态系统非常好,你想要的东西可能早有包来实现了。所以动手之前务必先Google一下有没有现成的东西。以及,解决问题最好的地方是Python官方文档,其次是Google、github和stackoverflow,最后是邮件列表和论坛。在网上向别人提问注意礼貌。

3.深入理解

我的主要工作是Python,像深入理解一下Python,尤其是工作中不常用到的东西,例如asyncio,多线程等。

我推荐一些阅读资料:

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

4.面试的准备

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

  1. https://github.com/taizilongxu/interview_python
  2. https://mp.weixin.qq.com/s/O47Oa8bAu9kJxYzXJcHuWw
  3. http://www.wklken.me/posts/2015/08/26/python-some-test-questions.html

5.FAQ

1.我在学习机器学习,有必要学习Python吗?

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

2.有必要使用Linux吗?

没有必要但是推荐使用Linux的命令行。我所有的工作内容都是在终端下完成的,终端相比于IDE更加高效,而且有很多awesome的工具。但是你也可以用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?”已经有4条评论

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注