Skip to content

数据类型

Python 的对象有类型,变量没有固定类型。判断类型优先使用 isinstance();只有调试或框架边界检查时才使用 type()

py
assert isinstance(42, int)
assert isinstance(True, bool)
assert isinstance(True, int)  # bool 是 int 的子类,需注意此关系

常用内置类型

类型特点常见用途
intfloatboolNone基础值计数、计算、状态、缺失值
strbytes不可变文本/字节序列文本、编码数据
list有序、可变保持顺序的集合
tuple有序、不可变固定结构、可作字典键的值
dict键值映射,保留插入顺序结构化数据、索引
setfrozenset元素唯一去重、成员关系、集合运算

listdictset 可变;strtuplefrozenset 不可变。不要把可变对象作为函数默认值。

序列、切片与解包

py
name = "Python"
assert name[0] == "P"
assert name[-2:] == "on"
assert name[:2] + name[2:] == name

first, *middle, last = [1, 2, 3, 4]
assert (first, middle, last) == (1, [2, 3], 4)

切片上界不包含在结果中。切片通常会创建新序列;普通赋值不会复制对象。

字典、集合与推导式

py
user = {"id": 1, "name": "Ada"}
user["email"] = "ada@example.com"

unique_names = {"Ada", "Guido", "Ada"}
squares = {number: number**2 for number in range(5)}

访问可缺失字典项使用 mapping.get("key") 或显式处理 KeyError,避免以 or 代替缺失判断,因为 0、空字符串和空集合也是假值。

比较、相等与格式化

  • == 比较值;is 比较对象身份。仅用 is None 判断 None
  • andor 返回操作数,不一定返回布尔值;需要布尔结果时使用 bool()
  • 字符串格式化优先使用 f-string。
py
price = 12.5
message = f"价格:{price:.2f}"
assert message == "价格:12.50"

金额等精确十进制计算使用 decimal.Decimal,不要使用 float

参考

基于 MIT 许可发布