前端 Python 3.12

3. Python 速览

注释、缩进块、数值与字符串、列表与引用语义、基础循环与 print——用语义而非句法轰炸建立「最小可用 Python」。

3.1 基础规则

  1. 注释# 直到行尾;字符串字面量里的 # 是普通字符。
  2. 交互式会话>>> 前缀是输入;没有前缀的一般是输出。复合语句在 REPL 里用空行结束块。
  3. 结构化缩进定义块,没有花括号;同一块必须使用一致的缩进宽度(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.3

3.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 真值、isNone

  • 假值None、零、空容器(''[]{}set()…)为假;其余大多走 __bool__ / __len__
  • == vs is== 是值相等;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-stringf"{x=}"

权威延伸3. An Informal Introduction to Python


3.7 JS 基本类型与 Python 对照

JS 里常说的「基本类型」是语言内建的原子值;Python 没有同一套「primitive / object」二分(intstr 等也是对象),但心智模型上可以这样对齐。

JS(基本类型)Python 里接近什么要点
undefined无直接对应未赋名的变量读不到(NameError);缺省参数、缺键多用 None 或抛错,语义和 undefined 不完全一样。
nullNone单例;判空写 x is None
booleanboolTrue / Falseboolint 的子类(True == 1 为真,但别依赖这种写法)。
numberintfloatJS 一个 number 包 IEEE 754 双精度;Python 整数任意精度,与 float 分开;没有 NaN / Infinity 字面量,用 float('nan') 等。
bigintint大整数在 Python 里仍是普通 int,无需后缀。
stringstr不可变 Unicode 文本;无「字符类型」,单字符也是长度为 1 的 str
symbol无内置对应需要「唯一键」时常用 enum、对象身份或字典里自建哨兵对象。

On this page