🍓 第六章 开发 Python 程序
📄 一句话概括

前五章你都在用这台机器(装系统、敲命令、架服务器);从这一章起,你开始给它写"命令"。 本节先把这门语言认清楚: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,每次都要"带着翻译"跑
快慢 快(翻译这步已经提前做完了) 慢一些(跑的时候才翻译)
方便 改一个字要重新翻译(重新编译) 改完直接跑,没有等待

树莓派为什么会选"慢"的那一派? 因为在这个场景里,"快"根本不是你想要的:

💡 一句话记住

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` 是什么意思

-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 的报错是"从下往上"读的:最后一行是【什么错】,往上一行是【在哪一行错的】。 这一条以后能救你无数次——报错不是坏事,是机器在告诉你它卡在哪。

七、常见误区

  1. "Python 是玩具语言,只能做小东西" —— 不对。Instagram、YouTube、Dropbox 的后台都在用 Python,它还统治了 AI / 数据分析领域。它是"上手快"不等于"上限低"。
  2. "我学过 C++ / Java,Python 就不用学了" —— 恰恰相反。在树莓派上不学 Python,你就没法抄作业、没法排查——社区那 90% 的示例代码都是它。学过别的语言只是让你学得更快,不是可以跳过。
  3. "缩进随便打几个空格都行,只要看着整齐" —— 错。缩进是语法。而且同一段代码里,要么全用空格、要么全用 Tab,不能混(混了报 TabError,肉眼还看不出区别)。编辑器会自动帮你统一,手写要小心。
  4. "python 命令找不到,是因为我没装 Python" —— 不是。装是装了的,只是没有 python 这个短名字,写 python3 就有了。
  5. "Python 慢,所以做不了正经项目" —— 看场景。慢的是 Python 本身的计算,不是它调用别的东西。真正吃性能的部分(图像处理、数值计算)都是底层用 C 写好的库在跑,Python 只负责"指挥"。它慢的是指挥的速度,不是干活的力气。
  6. "网上教程都能抄" —— 得先看一眼年代。看到 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 里缩进就是语法**,缩进错了不是排版难看,而是程序出错(甚至逻辑悄悄跑偏)。

相关笔记