3. Python 速览
注释、缩进块、数值与字符串、列表与引用语义、基础循环与 print——用语义而非句法轰炸建立「最小可用 Python」。
3.1 基础规则
- 注释:
#直到行尾;字符串字面量里的#是普通字符。 - 交互式会话:
>>>前缀是输入;没有前缀的一般是输出。复合语句在 REPL 里用空行结束块。 - 结构化:缩进定义块,没有花括号;同一块必须使用一致的缩进宽度(PEP 8 建议 4 空格)。
前端对照:缩进块 ≈ if () { ... },但这里缩进错误是语法错误,没有「自动插入分号」救你。
3.2 数字与运算
| 运算符 | 含义 | 备注 |
|---|---|---|
+ - * / | 四则 | / 总是得到 float(和 JS / 不像 C 那样整除) |
// | 整除(向下取整) | -3 // 2 == -2 |
% | 取余 | 与 // 搭配能把整数分成「商 + 余」 |
** | 幂 | 优先级高于一元 -:-3**2 == -9 |
- 类型:
int(任意精度)、float;混合运算会把int提升到float。 - 未绑定名:读取不存在的变量 →
NameError。 - 交互魔术变量:
_保存上一条表达式语句的值(仅 REPL,脚本勿依赖)。
# 许多算法题写法:同时更新两个滚动变量
a, b = 0, 1
while a < 100:
print(a)
a, b = b, a + b和 JS 的坑:0.1 + 0.2 在两者里都不精确;要十进制语义用 decimal.Decimal(别用 float 算钱)。
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2")) # 0.33.3 字符串 str
- 引号:
'...'与"..."等价;可嵌套使用减少转义。 - 原始字符串
r'c:\new':反斜杠大多按字面量保留(正则里常用)。 - 多行:
"""..."""/'''...'''。 - 拼接:相邻字面量自动拼接
'Py' 'thon';一般拼接用+;3 * 'ab' == 'ababab'。 - 切片
s[i:j]:含头不含尾;索引越界抛错,切片会夹紧。 - 不可变:不能原地改某个字符。
line = " hello, world "
print(line.strip().split(",")) # ['hello', ' world']
path = r"C:\temp\new"
print(path) # 单反斜杠字面量,读文件路径时很省心f-string(日常默认):对齐 TS 模板字符串,但花括号里是真正 Python 表达式。
name, n = "Ada", 3
print(f"{name=!s}, cube={n**3}")3.4 列表 list
[1, 'a', 2.0]:可变、有序、可重复。- 引用语义:
a = b绑定同一对象;a[0] = 1另一方也看见变化。
a = [[1], [2]]
b = a.copy() # 浅拷贝:顶层列表是新的
b[0].append(9) # 但嵌套列表仍是共享的 → a[0] 也变
print(a) # [[1, 9], [2]]
import copy
c = copy.deepcopy(a) # 需要「树状拷贝」时用深拷贝- 切片赋值可批量替换:
nums = [10, 20, 30, 40]
nums[1:3] = [200, 300, 400]
print(nums) # [10, 200, 300, 400, 40]前端对照:const a = b 在 JS 里也经常只是「绑定不能改指向」;Python 没有这一层关键字语法,只有名字绑定与对象是否可变两件事。
3.5 真值、is 与 None
- 假值:
None、零、空容器(''、[]、{}、set()…)为假;其余大多走__bool__/__len__。 ==vsis:==是值相等;is是对象身份。判单例None永远写x is None。
a = []
b = []
print(a == b) # True
print(a is b) # False(两个独立 list 对象)- 链式比较:
0 < x < 10合法,等价于数学写法,比在 JS 里写0 < x && x < 10更短。
3.6 速记
| JS/TS 习惯 | Python 注意 |
|---|---|
=== / Object.is | 日常价值相等用 ==;身份用 is |
null / undefined | 只有 None;用 x is None |
| 模板字符串 | f-string:f"{x=}" |
权威延伸:3. An Informal Introduction to Python
3.7 JS 基本类型与 Python 对照
JS 里常说的「基本类型」是语言内建的原子值;Python 没有同一套「primitive / object」二分(int、str 等也是对象),但心智模型上可以这样对齐。
| JS(基本类型) | Python 里接近什么 | 要点 |
|---|---|---|
undefined | 无直接对应 | 未赋名的变量读不到(NameError);缺省参数、缺键多用 None 或抛错,语义和 undefined 不完全一样。 |
null | None | 单例;判空写 x is None。 |
boolean | bool | True / False;bool 是 int 的子类(True == 1 为真,但别依赖这种写法)。 |
number | int、float | JS 一个 number 包 IEEE 754 双精度;Python 整数任意精度,与 float 分开;没有 NaN / Infinity 字面量,用 float('nan') 等。 |
bigint | int | 大整数在 Python 里仍是普通 int,无需后缀。 |
string | str | 不可变 Unicode 文本;无「字符类型」,单字符也是长度为 1 的 str。 |
symbol | 无内置对应 | 需要「唯一键」时常用 enum、对象身份或字典里自建哨兵对象。 |