前五章你都在用这台机器(装系统、敲命令、架服务器);从这一章起,你开始给它写"命令"。 本节先把这门语言认清楚:Python 是什么、它凭什么成了树莓派的母语、它和你可能听过的 C++ / Java 到底差在哪——一个字的代码都还没写,但后面五节的每一步都站在这里。
本课第一章的 1-5 里给过四块背景知识地图,其中一块就是 Python 编程,当时只列了四个概念(变量、分支、循环、函数)就跳过了。 现在回来把那一块补完——而且本章不是"语法书",是【在这台板子上写代码】:用什么写、怎么跑、怎么装库、怎么控制 GPIO。 读法建议:如果你学过 C++ 或 Java,本节重点看对照表(同一件事在新语言里长什么样);如果没学过任何语言,那更好——你不会带着旧习惯,Python 本来就该这么入门。
一、Python 是什么
Python 是一门编程语言——就是"写给电脑看的说明书"。
它 1991 年由一个荷兰人 Guido van Rossum 做出来,现在是世界上最流行的语言之一。在树莓派上,它几乎是"唯一答案"。
Python 的名字不是蟒蛇,来自一个英国喜剧团体 Monty Python。作者是他们的粉丝——所以这门语言从出生就带着一点"别太严肃"的气质。
为什么偏偏是它统一了树莓派?三个理由:
| 理由 | 说明 |
|---|---|
| 好读 | 语法接近英文,一眼看过去像自然语言,不像一堆符号 |
| 库多 | 别人写好的"工具箱"极多——控制硬件的、画图的、上网的、算数据的,直接拿来用 |
| 树莓派官方押注它 | 官方文档、官方硬件库、官方杂志的示例代码全是 Python,社区也就跟着全是 Python |
玩树莓派的人,绝大多数不是"程序员",而是想做个小东西的人(摄像头门铃、温湿度记录仪、自动浇花)。 这些人没时间从零研究底层,他们要的是"抄一段就能跑"。谁能让抄作业最省事,谁就赢——赢的就是 Python。
二、这台机器上,Python 是什么版本
先说结论:你的树莓派上已经有 Python 了,不用装。
Raspberry Pi OS 自带 Python 3,因为系统里有大量工具本身就用它写。当前系统的版本是这样的:
| 系统代次 | 内置 Python 版本 |
|---|---|
| Debian 13 Trixie(本课用的当前版) | Python 3.13(实际是 3.13.5) |
| Debian 12 Bookworm(上一版) | Python 3.11.2 |
在你自己的机器上敲一遍确认(命令行怎么开,见 在 Raspberry Pi OS 执行命令):
python3 --version
看到 Python 3.13.5 就对了。
① 命令是 python3,不是 python。
在 Debian 系里敲 python 大概率报 command not found。这不是没装,而是系统故意不给 python 起这个短名字(早年 python 指 Python 2,为了不搞混就干脆不提供)。记死:一律写 python3。
② 2 和 3 是两门"不兼容"的语言。
Python 2 已经在 2020 年停止维护了。网上如果看到 print "你好"(不带括号),那是 Python 2 的老代码,在你这台机器上直接语法错误。看到就跳过。
三、它和 C++ / Java 差在哪:一个"要不要翻译"的故事
这是理解 Python 最关键的一段。
电脑的 CPU 只认机器码(一串 0 和 1)。你写的代码它看不懂。所以中间必须有"翻译"。翻译方式分两派:
| 编译型(C++) | 解释型(Python) | |
|---|---|---|
| 怎么干 | 事先整本翻译成 exe,再拿去跑 | 一边跑,一边一句一句翻译 |
| 打比方 | 把整本书译好才出版 | 请一位同声传译,你说一句他译一句 |
| 产物 | 一个 .exe 可执行文件 |
没有 exe,每次都要"带着翻译"跑 |
| 快慢 | 快(翻译这步已经提前做完了) | 慢一些(跑的时候才翻译) |
| 方便 | 改一个字要重新翻译(重新编译) | 改完直接跑,没有等待 |
树莓派为什么会选"慢"的那一派? 因为在这个场景里,"快"根本不是你想要的:
- 让一个 LED 闪一下、读一次温度传感器,慢 0.01 秒你根本感觉不到;
- 但你想试 20 种写法,每改一次都要编译一分钟,那是真的疼。
Python 是用"运行速度"换"你的时间"。 在树莓派这种"做小项目、反复试错"的场景里,这笔交易太划算了。
还有三个"看得见"的差别,先混个眼熟(后面四节逐个展开):
# Python 写一个变量
age = 10 # 不用写 int,直接赋值
// C++ 写同样的东西
int age = 10; // 得先说清"这是个整数"
// Java 写同样的东西
int age = 10; // 同样要先声明类型
| 差别 | C++ / Java | Python |
|---|---|---|
| 类型 | 必须声明(int age) |
不用声明,赋什么值就是什么类型 |
| 内存 | C++ 要 new / delete,还有指针 |
完全不用管,也没有指针 |
| 分隔语句 | 每行结尾要分号 ; |
不要分号,换行就算一句 |
| 代码块 | 用大括号 { } 圈起来 |
靠缩进(空几格就是几层) |
缩进在 Python 里不是"排版好不好看",它就是语法本身。 该缩进的地方没缩进 → 程序直接报错;该对齐的没对齐 → 逻辑悄悄跑到别的地方去了(不报错,但结果不对,更难查)。 这一点我们会在 6-4 流程控制里正式讲,现在先记住一句话:Python 里,多打一个空格,能改变整个程序的意思。
四、学它,能在这台板子上做什么
别把 Python 当成一门"要考的语言",它是你在树莓派上的万能遥控器:
| 能干的事 | 靠什么 | 本课哪一章 |
|---|---|---|
| 让硬件动起来(LED、按钮、传感器、电机) | gpiozero 等库 |
硬件章节(本课后面会到) |
| 写小工具(定时备份、批量改名、抓网页数据) | 标准库 + 少量第三方库 | 本章之后你自己就能写 |
| 做 Web 后端(网站的数据处理) | Flask / Django | 你已经用 PHP 做过了(5-2),Python 是另一条路 |
| 拍照片、做图像识别 | picamera2 / OpenCV | 摄像头章节 |
| 采集数据、画图表 | numpy / matplotlib | 数据类项目 |
你上一章刚用 PHP 架了网站——那也是一种语言。 但你会发现:树莓派上做硬件,社区代码 90% 是 Python。 所以本章不是"又多学一门语言",而是拿到这把板子的正式钥匙——不学它,你后面所有的硬件实验都只能"看别人做"。
五、动手 Demo:让 Python 自报家门
这一节不用写代码文件,先在命令行里和它打个照面。打开终端(Ctrl + Alt + T),一条一条敲:
第 1 步 · 报版本
python3 --version
第 2 步 · 问它住在哪
which python3
第 3 步 · 让 Python 当场算一道题(不写文件,直接算)
python3 -c "print(3 * 7 + 1)"
-c 后面跟一段代码,意思是"别开文件了,直接把这段跑掉"。
这是以后排查问题最常用的手法——一行的验证,不值得为它建一个文件。
第 4 步 · 进交互模式,和它聊两句
python3
提示符会变成 >>>,这时可以一行一行地敲:
>>> 2 + 3
5
>>> "树莓派" + "你好"
'树莓派你好'
>>> 10 / 3
3.3333333333333335
>>> exit()
(最后 exit() 是退出。也可以按 Ctrl + D。)
第 5 步 · 看一门语言的"性格"
python3 -c "import this"
会吐出一段叫 Python 之禅 的短文,第一句是:
优美胜于丑陋,明了胜于晦涩。
这段文字是 Python 社区的"价值观宣言"。它解释了你以后为什么会觉得 Python 代码看起来很舒服——因为写它的人一直在追"简单、直白、别耍聪明"。 对照着想想 C++:C++ 给你无数种写法(灵活、也更容易把自己绕进去);Python 只给你一两种写法,但社区共识是"用最笨最直白的那种"。
看到什么算成功:
| 步骤 | 成功的样子 |
|---|---|
python3 --version |
打印出 Python 3.13.5(或 3.13.x) |
which python3 |
打印出 /usr/bin/python3 之类的路径 |
python3 -c "print(3 * 7 + 1)" |
打印出 22 |
python3 后敲 2 + 3 |
打印出 5 |
import this |
打印出那段《Python 之禅》 |
读结果:第 3 步的 3 * 7 + 1 结果必须是 22(先乘后加:21 + 1 = 22,不是 (3×7+1) 之外的任何算法)。
六、30 秒实验
实验一:证明"解释型"意味着改完就能跑
在交互模式里敲:
>>> x = 5
>>> x
5
>>> x = "现在是文字了"
>>> x
'现在是文字了'
注意发生了什么:同一个变量名 x,先装数字、再装文字,Python 一句"类型不对"都没说。
在 C++ 里这行不通——int x = 5; 之后写 x = "文字"; 直接编译报错。这就是"动态类型":变量的类型跟着值走,不跟着名字走。
实验二:感受缩进的威力
>>> for i in range(3):
... print(i)
...
0
1
2
(... 是 Python 提示你"这行还没完,接着说"。缩进那四个空格不能省——省了会报 IndentationError。)
实验三:看看它的"锅"
python3 -c "print(1 / 0)"
会看到一长串报错。别怕——最后一行写着 ZeroDivisionError: division by zero(除以零)。
Python 的报错是"从下往上"读的:最后一行是【什么错】,往上一行是【在哪一行错的】。 这一条以后能救你无数次——报错不是坏事,是机器在告诉你它卡在哪。
七、常见误区
- "Python 是玩具语言,只能做小东西" —— 不对。Instagram、YouTube、Dropbox 的后台都在用 Python,它还统治了 AI / 数据分析领域。它是"上手快"不等于"上限低"。
- "我学过 C++ / Java,Python 就不用学了" —— 恰恰相反。在树莓派上不学 Python,你就没法抄作业、没法排查——社区那 90% 的示例代码都是它。学过别的语言只是让你学得更快,不是可以跳过。
- "缩进随便打几个空格都行,只要看着整齐" —— 错。缩进是语法。而且同一段代码里,要么全用空格、要么全用 Tab,不能混(混了报
TabError,肉眼还看不出区别)。编辑器会自动帮你统一,手写要小心。 - "
python命令找不到,是因为我没装 Python" —— 不是。装是装了的,只是没有python这个短名字,写python3就有了。 - "Python 慢,所以做不了正经项目" —— 看场景。慢的是 Python 本身的计算,不是它调用别的东西。真正吃性能的部分(图像处理、数值计算)都是底层用 C 写好的库在跑,Python 只负责"指挥"。它慢的是指挥的速度,不是干活的力气。
- "网上教程都能抄" —— 得先看一眼年代。看到
print "你好"(不带括号)就是 Python 2 的老代码,直接跳过。这一条从本节开始,会一直陪着你这门课。
自测三问(点开对答案)
1. 在树莓派上,确认 Python 版本该敲什么命令?为什么不能敲 `python`? 2. "编译型"和"解释型"最大的区别是什么?树莓派为什么选解释型的 Python? 3. 在 Python 里,把同一段逻辑"框起来"靠什么?这和 C++ 有什么不同? **参考答案** 1. **`python3 --version`**。不能敲 `python` 是因为 **Debian 系故意不提供 `python` 这个短名字**(早年它指 Python 2,为了不混淆就取消了),不是没装。 2. **编译型(C++)事先把整本书译好再出版,解释型(Python)请同声传译一句句译**。树莓派要的是**改完立刻能跑**——硬件小项目的运行速度差你感觉不到,但每次都要编译的等待很疼。**用运行速度换你的时间。** 3. 靠**缩进**。C++ 用大括号 `{ }` 圈代码块、靠分号断句;**Python 里缩进就是语法**,缩进错了不是排版难看,而是程序出错(甚至逻辑悄悄跑偏)。- ☐ 下一节(6-2 在树莓派开发 Python 程序)
相关笔记
- 你需要知道的背景知识 —— 本节补完的就是它那张「四块知识地图」里的 Python 那一块
- 在 Raspberry Pi OS 执行命令 —— 本节敲的
python3 --version就是那里学的命令行 - C++的特点 —— 编译型语言的对照起点;本章会反复和 C++ 比
- 🔷 C++ 基础 · 索引 —— 学过的话,本章很多概念可以对照它复习
- ☕ Java 基础 · 索引 —— 另一个"必须声明类型"的语言,对照看更清楚
- 🍓 树莓派 · 索引 —— 全课路线图