# 变量：给数据起个名字，让程序记住它

承接“print 能跑起来”：用 = 赋值给数据起名字，分清整数、小数、字符串、布尔四种类型，并用 f-string 把变量说进输出。

> 变量与数据类型 · f-string 格式化 · 约 6 分钟 · 09 月 09 日

## 本篇要点

1. `=` 是赋值不是数学等号：先算右边的值，再把它装进左边的名字，方向不能反；判断两边是否相等用的是 `==`，下一篇讲 `if` 时会出现。
2. 变量就是给数据贴的名字标签，用之前必须先赋值；没赋值就使用会报 `NameError: name 'xxx' is not defined`。
3. 四种基础类型里，字符串必须加引号、数字不能加引号；类型不同能做的运算就不同，比如 `"1" + "2"` 是 `"12"` 而不是 3。
4. 把变量嵌进输出用 f-string：引号前加 `f`，变量放进英文花括号 `{}` 里，运行时自动替换成当前值；漏写 `f` 会原样输出花括号。
5. 想用 `+` 手动拼接字符串和数字会报 `TypeError`，统一改用 f-string 即可绕开这类拼接错误。
6. `bool` 只有 `True` 和 `False` 两个值，专为判断而生，是下一篇 `if` 的开关。

---

上一篇你让 Python 开口说话了，但它说的都是写死在代码里的话。真正替你干活时，数据每次都是新的：三月的报表有 860 行，四月变成 1200 行；要处理的文件名也每次都不同。总不能让程序靠你每月改一次代码来运转。所以这一篇解决一个小而关键的问题：程序怎么把数据“记住”，再把记住的东西说进输出里。你要认识两样东西：变量（variable）和四种最基础的数据类型。至于“一次记住 80 个文件名”那种成批记住的本事，靠的是列表，那是后面单独一篇的事——今天先专心把单个数据记牢、用好。

## 赋值：把右边的值装进左边的名字

`print("正在整理 2024 年 3 月的报表……")` 能跑，但“2024 年 3 月”是焊死在代码里的。改成先记后用的写法：

```python
文件名 = "2024年3月报表.xlsx"
行数 = 860
print(文件名)
print(行数)
```

运行后输出两行：`2024年3月报表.xlsx` 和 `860`。这里的 `=` 叫**赋值**（assignment），它的含义和数学里的等号有本质区别，这是新手最容易混淆的一处。数学里 `1 + 1 = 2` 表示两边永远相等；程序里的 `行数 = 860` 是一个**有方向的动作**：先看右边，把右边的值“装进”左边这个名字。名字只是贴在数据上的标签，就像快递盒上的收件人姓名——盒子里的东西才是本体，标签用来之后找到它。从这一行起，代码里再提到 `行数`，Python 就会自动去取那个 860。

所以记住这个读法：**先右边，后左边**。左边必须是名字，写 `3 = 单价` 会直接报错，因为数字 3 本身不能被改名。右边则可以是算式，Python 会先算完再存 [1]：

```python
行数 = 860
列数 = 12
格子数 = 行数 * 列数   # 先算出 10320，再装进“格子数”
print(格子数)
```

行尾 `#` 开头的是注释，给人看的，Python 不会执行。给变量起名有几条规矩：只能由字母、数字、下划线组成，不能以数字开头，不能含空格；英文名区分大小写，`month` 和 `Month` 是两个不同变量。像 `if`、`for` 这类词是 Python 留给语法用的，不能拿来当名字——下一篇你马上会亲眼见到它们。变量名技术上允许用中文（上面例子就是），但 Python 官方教程里的习惯写法是英文，如 `width`、`height`，长期写代码建议入乡随俗 [1]。

## 四种基础类型：装进变量的东西不一样

变量存的数据本身带着**类型**（type），类型决定了它长什么样、能对它做什么运算。新手阶段先认识这四种：

| 类型 | 含义 | 例子 | 常见用途 |
| --- | --- | --- | --- |
| `int` | 整数，不带小数点 | `3`、`-1`、`860` | 行数、次数 |
| `float` | 浮点数，带小数点 | `12.5`、`3.14` | 单价、比例 |
| `str` | 字符串，一段文字 | `"报表.xlsx"` | 文件名、提示语 |
| `bool` | 布尔值，只有两个 | `True`、`False` | 判断的“是／否” |

两个最要紧的细节。第一，字符串必须用引号包起来，单引号双引号都行，但必须成对。引号是给 Python 的暗号：“这是文字，不是名字”。反过来，数字千万不要加引号——`"860"` 是文字“860”，不是能参与计算的 860。第二，类型不同，能做的运算就不同：整数和小数能算数，字符串的 `+` 却是把两段文字首尾接在一起，`"1" + "2"` 得到 `"12"`，而不是 3。

`float` 这个怪名字来自“浮点”（floating point），大致可以理解成“小数点可以浮动的小数”。布尔值 `True` 和 `False` 首字母必须大写，它们只回答“是还是否”，是给判断准备的——下一篇的 `if` 全靠它当家 [3]。记不清某个东西是什么类型时，可以让 Python 自己告诉你：在 IDLE 的 Shell 里敲 `type(行数)`，回车会显示 `<class 'int'>`，试试无妨。

## 用 f-string 把变量嵌进一句话

`print(行数)` 能输出数字，但光秃秃一个 `860`，谁看得懂它是什么？更常用的做法是把变量嵌进一句完整的话里。最省心的写法叫 **f-string**：在引号前面加一个字母 `f`，想插入变量的地方用花括号 `{}` 包起来 [2]：

```python
单价 = 12.5
数量 = 4
print(f"订单金额是 {单价 * 数量} 元。")
```

输出：`订单金额是 50.0 元。`。`f` 是 format（格式化）的缩写，加了它，Python 就知道引号里有“坑位”要填：花括号就是坑位，运行时会自动替换成里面那个变量的当前值，里面甚至可以直接写算式。两个容易翻车的点：`f` 千万别漏——漏了它会老老实实把 `{单价 * 数量}` 当普通文字打出来；花括号要用英文半角 `{}`，中文全角括号不认。从今天起，你的 `print` 可以一律写成 f-string，省心得多。

## 两个最常见的报错，先认识就不慌

**`NameError: name '行数' is not defined`**：意思是“行数”这个名字还没被赋值，你就拿来用了。常见于三种情况：拼写不一致；确实忘了先赋值 [1]；字符串漏了引号——写 `print(报表)` 时 Python 以为 `报表` 是个变量名，查无此名就报这个错。修法只有一条路：先赋值、后使用，仔细核对拼写，文字记得加引号。

**`TypeError: can only concatenate str (not "int") to str`**：这个报错常来自想手动拼句子，比如 `print("第" + 月份 + "个月")`。字符串用 `+` 只能接字符串，整数 `月份` 混进来，Python 直接拒绝。这正是 f-string 存在的最大理由：不必再操心手动拼接时类型对不对，一律写成 `print(f"第{月份}个月")`，类型问题自动消失。

## 两段小例子，现在就能跟着敲

在 IDLE 新建文件，任选一段输入，按 F5 运行：

```python
文件名 = "3月销售数据.xlsx"
记录数 = 860
print(f"开始整理：{文件名}，共 {记录数} 条记录")
```

```python
单价 = 12.5
数量 = 4
总价 = 单价 * 数量
print(f"订单金额是 {总价} 元")
```

到这里，程序已经能记住数据、把数据算进结果、再完整地说给你听——它有了“记忆”。但记住之后呢？真正的干活是**看情况行事**：如果金额超过 100 就发提醒，如果记录数少得可疑就报警。这需要程序比较两个东西、判断真伪，而判断的结果正是布尔值 `True` 或 `False`——下一站，`if`。

## 来源

1. [Python 官方教程第 3 章：等号赋值（width = 20）、未赋值变量报 NameError、整数与浮点数、字符串引号的说明。](https://docs.python.org/3/tutorial/introduction.html)
2. [官方教程第 7 章 7.1.1 节：f-string（formatted string literals）的语法，f 前缀与 {expression} 花括号用法。](https://docs.python.org/3/tutorial/inputoutput.html)
3. [官方文档“内置类型”：int、float、str、bool 各自的定义与行为。](https://docs.python.org/3/library/stdtypes.html)

---

原文：https://pangzhengboyin.com/articles/python-variables-and-basic-types-cfddbd26

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
