Python入门一条龙
这是一篇 2015 年 7 月 3 日我发表在博客上的文章,未在公众号发布过。此文能在一定程度上代表我的学习方法论。老文重发,合并在 曾老师的 python 课集合 中。
对于我来说,Python 似乎已经入门了。那就把我的入门建议写出来吧,能让看到的人避免走弯路就好。下面的标题按时间顺序排列。
Python2 还是 Python3
毫无疑问,Python2 是辉煌,Python3 是未来。不要相信网上那些大牛吐槽 Python3 速度慢、兼容性差、库少等等言论了,仔细看看那些言论的发表时间。现在都特么已经2015了好么。
如果某个库到现在还没有兼容 Python3,那么放弃它就是了,因为它的作者已经抛弃了它。
使用 Python3 ,你不会再碰到恶心的 i18n 问题,也不会再面对那些奇怪的2包名了。
选 Python3 吧,因为你属于未来。
第一本 Python 书?
自然是这本了:The Python Tutorial(https://docs.python.org/zh-cn/3/tutorial/index.html)。
Python 文档的质量很高,更新也非常及时。看完上面这本(大约2天就够了),你就已经了解了 Python 最主要的特性。注意中文版可能有些错误,应和原版一起阅读。
离线文档
在 Windows/Linux 上安装 Zeal(https://zealdocs.org/),在 Mac OS X 上安装 Dash(https://kapeli.com/dash),然后下载 Python 的离线文档。
推荐开源项目 DevDocs,支持离线访问。
若是不愿意使用上面的软件,可以直接下载 Python.org 提供的离线文档,建议下载 HTML 版本,这样搜索会比较快速。
我常用的方案是在本地架设 HTTP Server(使用Apache 或者 Nginx),使用本地站点定位(例如:http://localhost/docs),这样可以整合许多可用的文档,搜索起来比较方便。
我目前喜欢使用下面的方式,在本地用 python 建立一个文档服务器:
python3 -m http.server -d /你的本地文档地址/
编辑器/IDE
如果没有什么偏好的话,可以使用 Sublime 。若是喜欢 IDE 类型,可以使用 PyCharm 这个和 Intellij IDEA 同源的优秀 IDE。若已经加入 Vim 或 Emacs 党,就什么都不用选。
我在 Python日课-2.2-IDE的选择 中推荐了 VSCode/Notepad++/Geany ,也很值得尝试。
Coding with Quick And Dirty
接着可以写一些菜鸟级的程序了。把以前用 bash 写的打包脚本神马的拿来改一改,用 sed/awk 写的文本分析器拿来重写下,找点自信让自己继续下去。不要太关注是否采用了 Python 风格的用法,这个过程的重点在于建立自信和找到使用 Python 的快乐感觉。
在这个过程中,不可避免的会接触到 Python 的标准库,用 Quick and Dirty 的方法去学习它们,让它们在你脑海中留下印象。
在这个不超过一周的过程中,可能会发出感叹:Kao,真 TMD 的简单。
Coding Reference
在 Coding 的过程当中,可能会碰到不少问题,毕竟一门流行的语言都有一个完善的社区和工作流程,要干活,就要了解他们。
我将这些信息集中在这里,方便查找:
你经常会碰到 PEP 类的东东,它们是什么?—— PEP Purpose and Guidelines
(https://www.python.org/dev/peps/pep-0001/)Python 代码规范 —— Style Guide for Python Code
(https://www.python.org/dev/peps/pep-0008/)安装第三方包,各种不同的方法令人很焦虑?—— Python 包管理工具解惑
你需要一个虚拟环境。—— Python 虚拟环境
这是不可避免的 —— Python2/3 在Windows 下的共存
(https://blog.zengrong.net/post/2350.html)
第二本 Python 书
第二本当然就是传说中 The Fuck Reference(https://docs.python.org/zh-cn/3/reference/index.html) 了。你不可能在第一时间全部读完它,但你至少应该先读完这个:Data model(https://docs.python.org/zh-cn/3/reference/datamodel.html) 。Data Model 本来就是一个面向对象语言的基础,先读完这个,才能够更顺畅地阅读 Reference 的其他部分。
Reference 应该作为字典,在不懂的时候就来查一下,在没事的时候就来翻一下。毕竟,这些是 Python 最基础的东西。
Coding With a Project
现在的 Coding 不能局限于脚本级别了,你应该完成一个项目。这个项目可以是你以前项目的 Python 翻版,也可以从头设计一个新的小型项目。
这个部分对你的帮助在于,通过完整项目的设计,你能将以前的工程化经验应用到 Python 中来(或者反过来说也行),你会更了解 Python 在项目管理上的一些技能。
这方面值得单独写一篇文章来说明,不过我似乎不必写了,因为已经有一篇了:Open Sourcing a Python Project the Right Way 。
下面是我初学 Python 的时候建立的两个项目,我一直在对它们维护到现在。他们的内容足够简单,可以拿来稍作参考。
rookout(https://github.com/zrong/python) 一些我自己常用的 python 功能封装,Python 库项目。已经发布到 pipy 上。
wpcmd(https://github.com/zrong/wpcmd) 通过 WordPress XML-RPC 接口在本地创建、更新 WordPress 博客的命令行工具,Python 命令行工具项目。zengrong.net(曾经) 就是使用该工具进行管理。
如果对 GUI 开发感兴趣,我建议在这个阶段直接开启一个 GUI 项目,使用 PyQt5,然后使用 cx_Freeze(https://blog.zengrong.net/post/cx_freeze-package-python34-and-pyqt53/) 打包。
在这个阶段,必须要注重 code style,深入理解各种不同用法,了解API和标准库(仅仅是了解,不必熟悉),并完全忘记前面施行的 Quick And Dirty 方法。
2021-06-13 更新:
之后我又写了一些稍复杂一些的开源项目,也可以参考。
WizNote 转换到 Joplin 花了一些时间对这十年的文档进行了整理,把 3000 多篇精简到 2000 多篇,在 2021 牛年春节期间,用 Python 写了一个转换工具 wiz2joplin(https://github.com/zrong/wiz2joplin),完成了十年的转换。
pyape(https://github.com/zrong/pyape) 我对 Flask、SQLAlchemy 等相关 WEB 包做的封装,包含构建 RESTFul API 的通用工具。SAGI GAMES 早期的短连接服务器采用这套包来开发。
没有终点
Python 可以做很多事情。科学家用它来做 科学计算(http://www.scipy.org/),漫画爱好者用它来爬站,程序员们用它来写开源/商业软件(http://orange.biolab.si/),我们也曾经用它做游戏服务器,还有 游戏引擎(http://codeboje.de/2d-and-3d-game-and-rendering-engines-python/) 直接使用它做脚本语言。
写 Python,需要注意的是它是 Python,不是 C++。对任何一个新的语言,都不要试图完全用自己已有的语言经验去理解和使用它。在程序中要体现出 Python 的特点:lambda、生成器、列表推导式,这些东西不可不用,也不应乱用。
入门到此为止,但学习没有终点。我列出一些可能所有 Python 使用者都需要了解的东西(或需要的资源),而更多的内容,只能根据偏好和使用方向自己选择了。
参考链接
公众号不支持外链,请点击「阅读原文」查看。
Python 2/3 区别(What’s New In Python 3.0)
2to3 - Automated Python 2 to 3 code translation
PyZh
全局解释器锁 GIL
Python 测试框架的选择
《深入Python3》
《Python Cookbook 3rd Edition》
《用Python做科学计算》
笨办法学Python
A Beginner’s Guide to Python