Python 基本类型
Python 常用标量与文本基础:int 任意精度、float 二进制浮点、bool 是 int 子类、None 单例,以及 str 的不可变 Unicode 文本。
#type / concept
#status / growing
#tech / dev
#resource / python
#tech / lang / python
[!info] 关联笔记
Python 基本类型
这个概念为什么出现
业务字段最终要落成数字、真假、空缺与文本。Python 把最常用的“标量”做成对象:
int默认任意精度,少见溢出惊喜float遵循二进制浮点,有精度坑bool是int的子类(历史与兼容)None表示“没有值”的单例str是不可变 Unicode 文本
容器类型(list/dict…)建立在“对象引用”之上,但先把标量钉死。
[!abstract] 一句话理解 Python 基本业务标量以对象形式存在:
int/float/bool/None/str各有身份与规则;bool是int子类,None用is判断,字符串不可变。
最小可运行示例
先把示例放进业务场景,再看代码:
场景:健康打卡服务汇总一条用户上报
体态 App 上报:是否完成、年龄、体温、昵称、备注是否缺省。服务端要:
- 用
bool/int/float/str/None建模 - 打印给客服看的一行摘要
- 演示
True的整数算术与浮点误差意识
# health_checkin_types.py
# 业务意图:用内置标量表达一次打卡,并生成客服摘要行。
# 教学点:
# - bool 是 int 子类,True == 1;
# - None 表示“备注缺失”,与空字符串不同;
# - float 适合体温展示,但金额等不要用裸 float 累积。
def format_checkin(done: bool, age: int, temp_c: float, nickname: str, note: str | None) -> str:
# 完成人数统计时常把 bool 当 0/1 累加——这里故意展示该特性。
done_score = done + 0 # True -> 1, False -> 0
note_text = note if note is not None else "(no note)"
return (
f"user={nickname}; age={age}; temp={temp_c}; "
f"done={done}({done_score}); note={note_text}"
)
def main() -> None:
line = format_checkin(True, 18, 36.6, "gopher", None)
print(line)
print("True is int subclass?", issubclass(bool, int))
# 经典浮点:0.1 + 0.2 不等于 0.3
print("0.1 + 0.2 == 0.3?", (0.1 + 0.2) == 0.3)
if __name__ == "__main__":
main()
建议运行:
python health_checkin_types.py
期望输出:
user=gopher; age=18; temp=36.6; done=True(1); note=(no note)
True is int subclass? True
0.1 + 0.2 == 0.3? False
结合场景再看三个关注点
- 缺省用
None,不要和""/0混成一种“假”。 bool能参与算术,但业务代码更推荐显式int(done)或分支,避免可读性坑。- 钱、精确小数优先
decimal.Decimal,不要用float累加金额。
核心概念与准确模型
类型速查
| 类型 | 典型用途 | 关键规则 |
|---|---|---|
int | 计数、ID、金额分 | 任意精度(内存允许) |
float | 科学量、温度 | 二进制浮点误差 |
bool | 开关、标志 | True/False;是 int 子类 |
NoneType | 缺失 | 单例 None,用 is |
str | 文本 | 不可变 Unicode |
bytes | 原始字节 | 另文展开 |
真值(预告)
在布尔上下文中,0、0.0、""、None、空容器为假;其它通常为真。细规则见后续 None 与真值笔记。
字符串基础
- 字面量:单引号、双引号、三引号
- 拼接与格式化:
+、f-string - 不可变:
.replace返回新字符串
边界情况与反直觉行为
True + True == 2合法但少在业务中炫技。- 极大
int运算变慢,不是静默溢出。 float("nan")与自己也不相等,比较需特殊处理。
常见误区
[!warning] 常见误区:用 float 存货币 错误理解:两位小数用 float 足够。
正确模型:二进制浮点无法精确表示很多十进制小数;金额用整数分或 Decimal。
[!warning] 常见误区:用
== None错误理解:与普通相等比较一样即可。
正确模型:惯用is None,避免重载__eq__的对象干扰。
工程实践
- 对外 JSON 字段类型稳定;
None与缺省字段策略写清。 - 温度/比例可用 float;账户余额不要。
- 文本处理先明确
strvsbytes(网络与文件边界)。
本节总结
基本类型是对象模型的“原子材料”。先掌握身份、不可变与浮点边界,再进入容器与类。
自测题
- 为什么
note: str | None比用空字符串表示缺失更清晰? bool是int子类带来什么好处与坏处?
参考答案
- 空字符串可能是合法业务值(用户清空备注);
None表达“未提供”。 - 好处:历史兼容、可当 0/1 聚合;坏处:类型意图变模糊,易写出晦涩算术。
延伸阅读与资料来源
| 资料 | 类型 | 支撑内容 |
|---|---|---|
| Built-in Types | 文档 | 内置类型行为 |
| Tutorial – Numbers | 教程 | 数字入门 |