这不是再听一遍“变量、字符串、print()”,而是做一次工程化复盘:代码为何换台电脑就失效?三引号是不是注释?is和==为什么不能混用?
第一层的验收标准只有一句话:让数据有名字、有类型、有边界,也让代码有可以复现的运行入口。

01、先把复习目标说清楚
基础语法真正要解决的,不是“记住多少关键字”,而是建立一条稳定链路:
选定解释器 → 隔离依赖 → 写出合法语法 → 理解对象和值 → 接住外部输入 → 给出可检查的输出。
本文按这条链路复习 11 个知识点。示例以 Python 3.12 为基线,在 Python 3.13 也可运行,可直接复制复核。
02、环境和工具:先确定代码由谁执行
2.1 Python 安装、版本与环境管理
官方概念
Python 解释器负责读取并执行 Python 程序。项目环境则负责回答另一个问题:这次执行使用哪个解释器、哪些第三方包及其版本。venv会基于现有 Python 安装创建轻量级隔离环境;pyenv更适合管理多套 Python 版本;Conda 环境还能把 Python 与非 Python 依赖一起管理。
Python 3.12 与 3.13 都可作为学习基线,但项目不能只写“需要 Python 3”,应至少记录主次版本和依赖清单。
类比记忆
解释器像厨房,依赖像食材。只给菜谱不给厨房和食材清单,别人就很难复现同一道菜。
python3 --version
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
示例输出:
Python 3.12.3
Windows 通常用.venv\Scripts\activate激活。多版本切换可用pyenv local 3.12.3;复杂的本地库可交给conda create -n demo python=3.12。三者解决的问题不同。

2.2 IDE 与开发工具
官方概念
IDE 不改变 Python 语言,它把解释器选择、补全、调试和测试集中到一个界面。VS Code 依靠 Python 扩展;PyCharm 强调项目级分析;Jupyter 用单元格组织代码、文字和结果。
类比记忆
IDE 像驾驶舱,解释器才是发动机。仪表盘再漂亮,选错发动机,程序仍会使用错误的包和版本。
import sys
print(sys.executable)
print(sys.version_info[:2])
示例输出:
/project/.venv/bin/python
(3, 12)
遇到“终端能运行,IDE 却报缺包”,先比较sys.executable,通常比反复安装依赖更快。

03、执行方式:交互试探,脚本沉淀
3.1 REPL、IPython 与 .py 脚本
官方概念
Python 解释器在交互模式下逐条读取、求值并输出结果,这就是 REPL。IPython 在这个基础上增加历史记录、自动补全和便捷命令。.py脚本则把语句保存为文件,适合复用、测试、评审和版本控制。
类比记忆
REPL 像草稿纸,适合验证一个想法;脚本像正式账本,负责留下可以再次执行的证据。
交互模式可先试算
>>> 7 * 6
42
确认后写入 demo.py
def answer() -> int:
return 7 * 6
print(answer())
脚本输出:
42
实用节奏是“小范围交互验证,大范围脚本固化”。只留在 Notebook 或 REPL 里的步骤难以稳定复现。

04、语法和名字:让解释器与读者得到同一意思
4.1 注释、缩进、分号与续行
官方概念
#从当前位置开始单行注释。三引号创建的是字符串字面值;放在模块、类或函数开头时,它可以成为文档字符串,但它不是 Python 的“多行注释语法”。
Python 用缩进划分代码块。PEP 8 建议每级 4 个空格。分号能把多个简单语句放到同一行,却降低可读性;长表达式优先在括号内隐式续行。
类比记忆
缩进像文章层级,决定哪句话属于哪一段。三引号像一张可能被保存下来的说明卡,不是把内容扔进废纸篓。
def describe(score: int) -> str:
"""按分数返回结果。"""
这里才是注释
if score >= 60:
return "通过"
return "继续练习"
total = (
20
+ 22
)
print(describe(total), total)
输出:
继续练习 42

4.2 变量、标识符与关键字
官方概念
赋值语句把名称绑定到对象。名称不是一个固定类型的盒子;类型属于对象,名称之后可以重新绑定。标识符可以包含 Unicode 字母、数字和下划线,但不能以数字开头,也不能使用保留关键字。普通变量和函数推荐snake_case。
类比记忆
变量名更像行李牌,不是行李箱。换一件行李,牌子可以重新挂;两个牌子也可能暂时指向同一件行李。
import keyword
course_name = "Python 基础"
score = 42
passed = score >= 60
print(score, passed)
print(keyword.iskeyword("class"))
输出:
42 False
True
像list、str这样的名称虽然不是关键字,也不宜拿来做变量名,否则会遮蔽内置对象。

05、数字、布尔与空值:先分清值的语义
5.1 int、float、complex 与 math
官方概念
Python 的内置数字类型包括整数、浮点数和复数。int支持任意精度,但仍受可用内存限制;float通常以机器双精度浮点数实现,因此很多十进制小数不能被二进制精确表示;复数写作a + bj。math模块提供实数范围内的常用数学函数。
类比记忆
整数像完整的积木块;浮点数像带刻度的量杯,刻度有限,读数可能有微小误差;复数则多了一条与实轴垂直的坐标轴。
import math
big_number = 10**50
price = 0.1 + 0.2
point = 3 + 4j
print(len(str(big_number)))
print(price)
print(point, math.sqrt(81))
输出:
51
0.30000000000000004
(3+4j) 9.0
金额等精度敏感的业务,不应直接拿浮点结果做相等判断,可进一步使用decimal.Decimal。

5.2 bool、真值判断与 None
官方概念
布尔类型只有True和False两个值,并且是整数类型的子类。条件判断会对对象执行真值测试:None、数值零和空容器通常为假,非空对象通常为真。None表示“没有值”,它是单例对象,判断时优先使用is None。
类比记忆
False是明确的否定,None是尚未提供答案;空列表则是“有一个容器,但里面暂时没有东西”。它们在条件中都可能为假,业务含义却不同。
values = [None, 0, "", [], "0", [0]]
print([bool(value) for value in values])
result = None
print(result is None)
输出:
[False, False, False, False, True, True]
True
不要用if not result代替所有缺失判断,合法的0、False或空集合也会被拦下。

06、字符串、转换与运算:把边界写明白
6.1 字符串、转义、索引与切片
官方概念
str是不可变的 Unicode 文本序列。单引号和双引号语义相同;反斜杠用于转义;原始字符串可以减少路径、正则表达式中的转义噪声。索引取得单个字符,切片按“左闭右开”范围返回新字符串,+可以连接字符串。
类比记忆
字符串像装订好的字符册:可以翻到某一页,也能复印其中几页,但不能直接替换原册中的一个字符。
title = "Python 基础"
path = r"C:\notes\python"
print(len(title))
print(title[0], title[7:], title[:6] + " 复习")
print(path)
输出:
9
P 基础 Python 复习
C:\notes\python
切片越界通常不报错,单个索引越界会触发IndexError,前者常用于截取预览文本。

6.2 显式类型转换与隐式数值转换
官方概念
int()、float()、str()、bool()会按各自规则构造目标类型。Python 不会把任意字符串自动变成数字;混合数字运算时,较窄的数字类型可能被转换为较宽类型,例如整数与浮点数相加得到浮点数。
类比记忆
类型转换像过海关:外部数据先出示原始证件,再明确换成系统认可的身份。没有检查就放行,错误会在更远处爆发。
raw_score = "95"
score = int(raw_score)
average = (score + 28) / 2
print(average)
print(bool("False"), bool(""))
输出:
61.5
True False
bool("False")为真,因为它是非空字符串。解析表单布尔值时,应约定可接受文本,不能直接调用bool()。

6.3 运算符:计算、判断与身份
官方概念
算术运算符处理数值,比较运算符产生布尔结果,and、or、not组合条件,位运算符作用于整数的二进制位,in检查成员关系,is检查对象身份。==比较值是否相等,is比较是否为同一个对象。
类比记忆
==像比较两本书内容是否相同,is像检查它们是不是同一本实体书。
left = [1, 2]
right = [1, 2]
print(7 // 3, 7 % 3, 2**5)
print(2 in left)
print(5 & 3)
print(left == right, left is right)
输出:
2 1 32
True
1
True False
除单例判断外,不要用is替代值比较。小整数或字符串偶尔能用is比对,只是实现细节。

07、输入输出:程序与外界的第一条边界
7.1 print()、input()、f-string 与 format()
官方概念
print()会把对象转换成文本并写入文本流,sep控制多个对象间的分隔符,end控制末尾内容。input()读取一行文本、去掉行尾换行并返回字符串。f-string 在字符串中计算表达式,格式说明可以控制对齐、位数等展示规则;str.format()提供另一套格式化入口。
类比记忆
input()是收件窗口,先收到的都是文本信封;类型转换负责拆封验货;print()是发件窗口,格式化规则决定标签怎么贴。
name = input("你的名字:")
raw_score = input("你的分数:")
score = float(raw_score)
print("姓名", "得分", sep="|")
print(f"{name}:{score:.1f}")
print("{}:{:.0f}".format(name, score), end="\n")
输入与输出:
你的名字:小林
你的分数:95
姓名|得分
小林:95.0
小林:95
边界处理还要考虑空输入、非法数字和业务范围。先接收字符串,再显式校验和转换。

08、三个洞见:基础语法如何长成工程能力
洞见一:环境不是个人设置,而是可执行契约
“在我机器上能跑”只证明个人环境碰巧满足条件。一个可交接的项目,至少应让版本、依赖和启动命令可以被他人读取:
.python-version 或项目说明:Python 3.12
requirements.txt / pyproject.toml:依赖及约束
README:创建环境、安装与启动命令
虚拟环境不负责记录全部依赖,依赖文件也不负责选择解释器。版本选择、环境隔离、依赖锁定是三件相互配合的事。写清它们,才是“可复现交付”。

洞见二:理解对象,要同时看值、类型与身份
许多初学问题都来自只看“打印出来是什么”,却忽略另外两层:
left = [1, 2]
right = left
copy = [1, 2]
print(left == copy)
值相等
print(left is right)
身份相同
print(type(left))
类型为 list
名称绑定对象,对象拥有值、类型和身份。类型决定操作,值承载内容,身份说明两个名称是否指向同一对象。分清三者,重绑定、可变对象、None与is就容易理解。

洞见三:反馈速度与可追溯性要接力
REPL 快,脚本稳,IDE 帮你看全局,测试负责长期守门。它们不是互相替代的四种选择,而是同一条反馈链:
REPL / Notebook 验证表达式
↓
.py 脚本固化过程
↓
IDE 调试定位上下文
↓
测试与版本控制保留证据
两种偏差都要避开:只在交互窗口里试,结果无法重放;一开始就搭很重的工程,反馈又太慢。应让小验证尽快进入脚本,再逐步增加检查。

09、来源、概念索引与核心小结
权威来源与延伸材料
语言行为以 Python 官方文档和 PEP 为准,工具行为以各项目官方文档为准;中文课程适合跟练,版本有差异时回到官方定义核对。
:安装与平台配置。
:版本与安装包。
:创建、激活和隔离。
:多版本选择。
:创建、导出和恢复环境。
:解释器选择与调试。
:项目运行与调试。
:Notebook 生态。
:增强交互能力。
:交互与脚本执行。
:注释、标识符、缩进和字符串。
:缩进、命名和布局。
:表达式与赋值。
:真值、数字和序列。
:对象的身份、类型和值。
:比较、成员与身份运算。
:数学函数。
:关键字检测。
:f-string 与format()。
:参数与返回规则。
与:来自学习大纲的中文跟练材料。
极客时间《Python 核心技术与实战》:来自学习大纲的系统课程索引,适合配合官方文档复盘。
容易混淆的概念
解释器与虚拟环境
:前者执行代码,后者隔离某个解释器及其安装包;虚拟环境不是虚拟机。
注释与文档字符串
:#是注释;三引号只是字符串语法,处在约定位置时才成为文档字符串。
名称与对象
:变量名绑定对象,类型属于对象,不属于名称本身。
假值与缺失值
:0、空容器可以是假值,但不等于“未提供”;缺失语义通常用None表达。
相等与同一
:==比较值,is比较身份。
输入与类型
:input()永远先返回字符串,数值和布尔语义需要显式解析。
核心小结
把第一块内容按自上而下的思维导图展开,中心目标是:让 Python 基础代码可复现、可理解,并守住输入边界。
中心主题向下拆成四个主分支:环境与工具、执行与语法、对象与类型、运算与输入输出。
每个主分支继续落到可检查的动作:确认解释器、虚拟环境与 IDE;区分 REPL、脚本与缩进规则;看清值、类型、身份与None;最后处理类型转换、运算符和输入边界。
当这些检查项不再依赖死记硬背,第一块的知识才算真正连成一张图。
下一块将进入流程控制与函数。留一个问题:当输入可能为空、格式错误或超出范围时,你会怎样组织分支、循环和函数,让“异常路径”也清楚可读?

夜雨聆风