第 02 课 · 入门 · 18 分钟

Python 变量与数据类型

用变量保存值,理解 Python 如何判断一个值属于什么类型。

变量赋值类型查看算术与转换

到了中午,Maya 脑子里记着六个数,已经漏掉两个。给每个数起名字——杯数、单价、找零——是第一步。可如果同一个名字这次装的是文字,而不是数字呢?

变量给值起名字,让程序可以重复使用它。Python 是动态类型语言:你不需要声明类型,但每个值仍然有类型。理解类型,才能预测运算符和函数的行为。 你还会看到别名如何改变列表,以及为什么转换应该放在边界。

赋值就是给值起名

等号把右边的值赋给左边的名字。重新赋值会替换旧值。变量名要描述用途,例如用 order_total 而不是 t。

price = 4.5
quantity = 3
total = price * quantity
print(total)

一次小计算

先认识四种类型

整数保存整数值,浮点数保存小数,字符串保存文本,布尔值只有 True 和 False。type() 可以查看任何值的类型。看起来像数字的值,如果加了引号,仍然是字符串。

print(type(7).__name__)
print(type(4.5).__name__)
print(type("7").__name__)
print(type(True).__name__)

查看类型

有意识地转换类型

int() 把兼容的文本或小数转成整数,float() 转成小数,str() 把值转成文本。转换可能失败:int("hello") 会抛出 ValueError,后面会学习如何处理它。

count = int("12")
price = float("4.5")
label = str(2026)
print(count, price, label)

显式类型转换

一个名字可以指向可变对象

赋值不会复制列表。alias = orders 让两个名字指向同一个对象,所以通过一个名字修改,另一个也会看到。orders[:] 创建浅拷贝;如果列表里还有列表,内层对象仍然共享。

orders = ["latte", "tea"]
alias = orders
copy = orders[:]
alias.append("mocha")
copy.append("water")
print(orders)
print(copy)
records = [{"id": 1}]
shallow = records[:]
shallow[0]["id"] = 99
print(records)

别名、浅拷贝和共享的内层对象

在边界处转换一次

来自文件、网址和表单的值一开始都是文本。在边界处转换一次,之后就用数字计算。反复转换会把类型错误扩散到整个程序;只转换一次,后面的代码才可预测。

raw_count = "3"
raw_price = "4.50"
count = int(raw_count)
price = float(raw_price)
total = count * price
print(type(count).__name__, type(price).__name__)
print(f"{total:.2f}")

把文本变成数字一次

不要直接用 == 比较浮点数

在二进制浮点数里,0.1 + 0.2 并不精确等于 0.3。这个微小差异用 print() 看不出来,但用在相等判断里就会出错。展示时可以 round,做判断时用 math.isclose(),或者改用整数分。金额常用整数分保存,就是这个原因。

total = 0.1 + 0.2
print(total)
print(total == 0.3)
print(round(total, 2) == 0.3)
cents = 10 + 20
print(cents / 100)

近似浮点数与精确整数分

本课要点

  • 赋值把名字绑定到值,重新赋值会替换原值。
  • int、float、str、bool 是最先要熟悉的四种类型。
  • type(value).__name__ 会返回可读的类型名称。
  • 做算术前,先把输入或文本转换成数字。
  • 给列表赋值可能只是起别名;切片只复制外层列表。
  • 浮点数是近似值;比较时用误差范围,或者改用整数分。

常见错误

  • 把字符串和数字直接相加,没有先转换其中一边。
  • 以为 / 返回整数;在 Python 3 中,除法总是返回浮点数。
  • 在赋值之前使用变量,会触发 NameError。
  • 以为 b = a 复制了列表,其实两个名字指向同一个对象。
  • 浮点数运算之后直接写 if total == 0.3。
轮到你

为一个商品创建名称、单价和数量变量,打印保留两位小数的总价。

动手试试

改改变量、先预测输出,再运行代码。第一次点击“运行代码”时会下载 Python 运行时,可能需要几秒钟。

浏览器内 Python本地运行 · 无需账号
首次运行会从 CDN 下载 Pyodide。修改后点击“运行代码”。

练习本课

12 道题,作答后立即看到解释。

查看 12 道题答案开始练习
← 打印与字符串字符串方法 →