系列 · Python 零基础到简单脚本 第 2 篇 / 共 11 篇 教程

Python 变量、基础类型与转换:看见数据怎样变化

用库存数据的运行轨迹,图解变量名与值、重新绑定、str、int、float、bool、None,以及文本转整数和转换失败发生在哪一步。

作者:黄撑 更新于 2026-08-27
本文目录 7 节 · 点击展开

从 Excel、CSV 或网页表单读到库存时,眼前的 "3" 和真正能参与比较的数字 3 看起来很像,Python 却会把它们当成两种数据。

这一篇先不急着写复杂程序。我们只跟着一条 SKU 为 K161 的库存数据,亲眼看见它怎样被命名、转换、比较,以及错误会在哪一步拦住后续代码。

变量:一个名字怎样指向一个值

先运行一行最简单的代码:

stock = 8

Python 会先读右边的 8,再让左边的名字 stock 指向这个整数值。= 在这里表示“绑定”,不是数学题里的“左右相等”。

当前行stock = 8 怎样进入变量状态
01 · 名字stock以后用这个名字找到数据
03 · 值8int · 可以参与数值运算

执行后状态:名字是 stock,值是 8。两者有关联,但不是同一件事。

这一区分很重要:变量名负责让代码容易阅读,值才是实际参与计算的数据。名字可以换,名字指向的值也可以换。

再赋值不是把 8 改成 5

stock = 8
stock = 5

第二行执行时,名字 stock 会改为指向新的整数值 5。从这时起,再读取 stock 得到的是 5

之前 → 当前行 → 之后重新绑定改变的是名字与值的关系
01 · 之前
stock8

读取 stock 会得到整数 8。

02 · 当前行stock = 5

先得到右边的 5,再更新名字的指向。

03 · 之后
stock5

名字没有变;之后读取到的值变成了 5。

你不需要把变量想成一个会被涂改的盒子。对入门阶段来说,记住一句话就够:再次赋值,会让同一个名字代表新的值。

一条商品记录里有五种基础值

真实脚本通常会同时处理文字、整数、小数、真假和缺失值:

sku = "K161"
price = 129.9
stock = 8
is_available = stock > 0
remark = None

print(sku, price, stock, is_available, remark)
数据类型地图值的类型决定它适合参加什么操作
sku
”K161”str · 标识与文字要保留字母,不做加减
price
129.9float · 带小数的数值可参与金额计算
stock
8int · 整数适合库存、件数、次数
is_available
Truebool · 真或假来自 stock > 0 的结果
remark
NoneNone · 暂无值不是空文字、0 或 False

这里最容易混淆的是“长得像数字的文字”。例如订单号 "1008611" 虽然全是数字,通常仍应保留为 str,因为它是标识,不拿来做算术。库存 "3" 则需要先转成 int,才能与补货线比较。

如果不确定一个值的真实类型,可以让 Python 直接告诉你:

raw_stock = "3"
price = 129.9
remark = None

print(type(raw_stock))  # <class 'str'>
print(type(price))      # <class 'float'>
print(type(remark))     # <class 'NoneType'>

bool 通常是比较出来的结果

stock = 3
is_low_stock = stock < 5

print(is_low_stock)  # True

Python 先计算表达式 stock < 5,得到布尔值 True,再把名字 is_low_stock 绑定到它。这里的 True 不是一段说明文字,也不是手工填写的状态。

本章只需要两组运算符:

用途运算符例子与结果
基础算术+ - * /2 * 129.9 得到 259.8
基础比较== != > >= < <=3 < 5 得到 True

尤其要分清:stock = 3 是赋值,stock == 3 才是判断是否相等。

None 则表示“目前没有具体值”。它和 ""0False 都不同:

remark = None

print(remark is None)  # True

从文本到判断:看见每一步的状态

库存从外部进入 Python 时常常是文本。下面这段代码可以独立运行,它完成了一条完整路径:输入文本、转换整数、比较补货线、输出结果。

raw_stock = "3"
stock = int(raw_stock)
is_low_stock = stock < 5
message = f"库存:{stock},需要补货:{is_low_stock}"

print(message)

输出:

库存:3,需要补货:True
输入 → 转换 → 判断 → 输出”3” 怎样一步步变成 True
  1. 01 · 输入raw_stock = “3”
    之后
    raw_stock → “3”
    类型
    str

    引号说明它仍是文本,不能直接和整数 5 比较。

  2. 02 · 当前行stock = int(raw_stock)
    之前
    raw_stock → “3” · str
    之后
    stock → 3 · int

    int() 创建整数 3;原来的 raw_stock 仍是文本。

  3. 03 · 条件stock < 5
    代入
    3 < 5
    结果
    True · bool

    比较不会改变 stock,而是产生一个新的布尔值。

  4. 04 · 输出print(message)
    库存
    3
    需补货
    True

    前面产生的状态被组织成一行可读结果。

这条轨迹里产生了三个不同的值:文本 "3"、整数 3、布尔值 True。转换并不是给原文本换一个标签,而是得到一个类型不同的新值。

常用转换先记住这三个就够:

stock = int("20")       # 20
price = float("19.9")  # 19.9
label = str(20)          # "20"

转换失败:错误发生在 int(),不是比较时

int() 会尝试把文本解释成整数,但它不会保证任何文字都能转换。把中文数字“三”交给它时,代码会停在第二行:

raw_stock = "三"
stock = int(raw_stock)
is_low_stock = stock < 5
错误路径沿着执行顺序找真正失败的步骤
  1. 01 · 输入成功raw_stock = “三”

    状态中已有 raw_stock → “三”,类型是 str

  2. 02 · 出错行stock = int(raw_stock)

    ValueError“三” 不是 int() 能识别的整数写法。

    结果:转换没有产出整数,变量 stock 也没有在这一行成功建立。
  3. 03 · 未执行is_low_stock = stock < 5

    程序已经在上一步停止,因此比较没有发生,也不会得到 True 或 False。

看到这类报错时,不要只盯着最后想要的“补货判断”。先沿轨迹向前找:输入是什么类型,转换函数收到了什么,在哪一行没有产生预期的新值。后续的错误处理篇会继续讲怎样接住坏数据;本章先学会准确指出失败位置。

动手练习:追踪 K161 的库存状态

先复制并运行完整代码:

sku = "K161"
raw_stock = "3"
reorder_level = 5

stock = int(raw_stock)
is_low_stock = stock < reorder_level

print(f"{sku} 当前库存 {stock}")
print(f"需要补货:{is_low_stock}")

然后按执行顺序写出答案:

  1. raw_stock 的值和类型分别是什么?
  2. 执行 stock = int(raw_stock) 后,新产生了什么值?
  3. stock < reorder_level 代入数字后是什么表达式,结果是什么类型?
  4. raw_stock 改成 "8",从哪一步开始与原轨迹不同?
  5. raw_stock 改成 "三",具体哪一行失败,后面哪一行不会执行?

如果你能不运行代码就说出每一步的前后状态,再运行确认答案,这一章就已经达标。