01 / 导读
导读
引用
Matthes, E. (2022). Python Crash Course: A Hands-On, Project-Based Introduction to Programming (3rd ed.). No Starch Press.
章节概要
第三版分两部分共20章,另有后记和5个附录,篇幅500多页。第一部分(第1–11章)讲授语言本身;第二部分(第12–20章)在三个项目中运用所学:一个街机游戏、一组数据可视化和一个Web应用。每个主题之后都有按章编号的简短“Try It Yourself”(动手试一试)练习。据作者对这一版的说明,本书使用Python 3.11,推荐VS Code作为编辑器,用pathlib模块处理文件,并改用pytest而非标准库的unittest来讲测试;各项目使用其所依赖库的最新版本,包括Django 4.1和Bootstrap 5。
第1章:Getting Started(起步)
在Windows、macOS或Linux上安装Python和VS Code编辑器,运行第一个“hello world”程序,排查安装问题,以及从终端运行程序。
第2章:Variables and Simple Data Types(变量和简单数据类型)
程序运行时发生了什么,变量(被解释为值的标签),字符串及字符串方法(包括新增的去除前缀方法),整数和浮点数,常量,注释,以及“Python之禅”。每个主题都穿插讲解如何避免常见错误,本章还展示了Python改进后的错误信息。
第3–4章:Introducing Lists(列表简介);Working with Lists(操作列表)
创建、索引、修改和排序列表;接着讲for循环、避免缩进错误、用range()生成数值列表和列表推导式、切片和复制、元组,并通过PEP 8初步接触代码风格。
第5章:if Statements(if语句)
条件测试,if、if-else和if-elif-else结构,将条件语句用于列表,以及if语句的风格。
第6章:Dictionaries(字典)
使用键值对,遍历字典,以及列表与字典的相互嵌套。
第7章:User Input and while Loops(用户输入和while循环)
input()函数,使用标志的while循环,break和continue,以及用while循环处理列表和字典。
第8章:Functions(函数)
定义函数,带默认值的位置实参和关键字实参,返回值,传递列表,任意数量的实参,把函数存储在模块中以及各种导入方式。
第9章:Classes(类)
创建类和实例,修改属性,继承与方法重写,将实例用作属性,从模块中导入类,标准库,以及类的编码风格。
第10章:Files and Exceptions(文件和异常)
用pathlib读写文件,用try-except-else处理异常,分析多个文件中的文本,用JSON存储数据,以及重构。
第11章:Testing Your Code(测试代码)
用pip安装pytest,为函数编写能通过和不能通过的测试,各种断言,测试类,以及使用夹具(fixture)。
第12–14章:A Ship That Fires Bullets(会射击的飞船);Aliens!(外星人!);Scoring(记分)
受《太空侵略者》启发、基于Pygame的“外星人入侵”项目。读者规划游戏,创建窗口和响应按键的飞船,发射子弹,生成并移动外星舰队,检测碰撞,结束游戏,然后添加Play按钮、逐步加快的速度、记分牌、最高分、等级和剩余飞船数。整个项目中反复练习把代码重构为辅助方法。
第15–17章:Generating Data(生成数据);Downloading Data(下载数据);Working with APIs(使用API)
数据可视化项目。第15章用Matplotlib绘图(折线图、散点图、随机游走),并用Plotly模拟掷骰子。第16章读取CSV文件中的天气数据和GeoJSON格式的地震数据,绘制世界地图。第17章用Requests库从GitHub API获取数据,可视化最受欢迎的仓库,并介绍Hacker News的API。
第18–20章:Getting Started with Django(Django入门);User Accounts(用户账户);Styling and Deploying an App(设置应用程序的样式并部署)
Web应用项目“学习笔记”(Learning Log)。第18章创建虚拟环境和Django项目,定义模型,使用管理网站,并用模板构建页面。第19章添加用于输入数据的表单、用户注册和登录,并限制每个用户只能访问自己的数据。第20章用Bootstrap美化网站,并借助Git把它部署到Platform.sh托管服务上。
后记与附录A–E
附录涵盖安装与故障排除(附Python关键字和内置函数列表)、文本编辑器和IDE、获取帮助、使用Git进行版本控制,以及部署故障排除。
核心概念
第一部分:基础知识(第1–11章)
- 变量与数据类型:指向字符串、整数、浮点数等值的名字。
- 列表、元组和字典:Python的核心集合类型,以及循环、切片和推导式。
- 控制流:条件测试、if-elif-else结构和while循环。
- 函数与模块:带有灵活参数的可复用代码块,并组织到可导入的文件中。
- 类与继承:把现实世界的事物建模为具有属性和方法的对象。
- 文件、异常与JSON:读写数据、优雅地处理错误,以及在多次运行之间保存数据。
- 自动化测试:用pytest的断言和夹具检验代码。
第二部分:项目(第12–20章)
- 游戏循环与精灵:Pygame游戏的事件驱动结构。
- 数据可视化:用Matplotlib和Plotly把生成的、下载的和来自API的数据绘制成图表和地图。
- Web API:从在线服务请求结构化数据。
- 模型、视图与模板:Django Web应用的结构。
- 用户认证与部署:账户、访问限制,以及把应用发布上线。
评析
优点
- 一本书兼顾基础与项目。 《InfoWorld》的塞尔达尔·耶古拉尔普指出,许多书要么讲Python基础、要么讲项目,而本书两者兼备。三个项目使用真实的库(Pygame、Matplotlib、Plotly、Requests、Django),最终得到一个完整的游戏、交互式图表和一个已部署的网站。
- 持续不断的练习。 详细目录中列出了186道编号练习,每个主要主题之后都有几道,其中许多建立在前面的练习之上(嘉宾名单练习贯穿第3章,横向射击游戏贯穿第12–14章)。
- 及早养成专业习惯。 PEP 8风格指南、重构、pytest测试、虚拟环境和Git都出现在一本面向初学者的书中。错误处理随每项功能一起讲授,而不是留到最后。
- 内容新、支持完善。 第三版更新了语言版本、编辑器和各种库,作者网站提供源代码、速查表、练习答案以及每次印刷的更新说明。
局限
- 是编程实践,而非计算机科学。 本书讲的是如何编写能运行的Python程序,不涉及算法、Python内置类型以外的数据结构、复杂度或计算理论。
- 部署说明容易过时。 第20章把项目部署到Platform.sh。作者网站现在说明,该公司已更名并改变了做法,不再推荐学习者使用,并给出了针对另一家托管服务的替代步骤。读者应以网上版本为准。
- 项目重深度而非广度。 每个项目都深入讲解一个库;想更广泛地了解Python生态系统或学习更高级语言特性的学生,需要进一步阅读。
在课程中的定位
在程序设计入门课程中,本书是最注重动手、以项目为主导的第一本书。艾伦·唐尼的 Think Python 同样使用Python,但把编程当作像计算机科学家一样思考的方式来讲,更关注概念和问题求解,适合既想知道怎么写程序、也想了解程序为何能运行的读者。费莱森等人的 How to Design Programs 使用DrRacket中的教学语言而非主流语言,讲授系统化的设计方法。约翰·古塔格的 Introduction to Computation and Programming Using Python 更深入地探讨计算思维、建模和数据分析,是读完第一部分后很自然的下一步。
艾布尔森和萨斯曼的 Structure and Interpretation of Computer Programs 是研究抽象和解释器的经典之作,克尼汉和里奇的 The C Programming Language 则讲授包括指针和内存在内的C语言;这两本要求更高,适合已有编程经验的学生。常见的路线是先用马瑟斯的书学会语言,再读唐尼或古塔格的书掌握概念,然后在后续课程中转向C或SICP。
如何使用本书
本书适合任何年龄、任何专业的零基础初学者,适合课程教材偏重理论、想多练习动手做东西的学生,也适合想快速上手Python的其他语言程序员。不要求任何编程经验。
- 核心: 按顺序学习第一部分。亲手输入示例代码,在继续之前完成每一道“Try It Yourself”练习。第8–10章最值得花时间;讲测试的第11章即使课程不要求也值得一做。
- 项目: 按兴趣选择。每个项目依赖的是第一部分,而非其他项目。游戏项目教的是类和程序结构,可视化各章适合理科或数据密集型专业的学生,Web项目篇幅最长、难度最大。
- 附录: 把附录A(安装与故障排除)和附录C(获取帮助)放在手边,并用附录D把自己的项目纳入Git版本控制。
下载源代码,并在作者网站上查看与自己手中印次对应的更新说明,尤其是在动手进行第20章的部署之前。读完全书后,独立地对其中一个项目做较大的扩展:设计并调试一个没有指引的程序,正是把书中练习转化为编程能力的关键。
