Python: 变量与基本数据类型

上一课我们让 Python 输出了一行"Hello, World!"。但如果每次都只能输出固定的内容,编程就太无聊了。这一课我们来学变量——它是编程中最基础也最重要的概念,相当于给数据贴上一张带名字的标签,让你可以随时存取和修改。


1. 变量是什么

变量就是给数据起个名字。你可以把它想象成一个带标签的盒子:标签上写着名字(变量名),盒子里装着数据(值)。

PYTHON
# 定义一个变量,名字叫 age,里面装了数字 18
age = 18

当你写 age = 18 时,Python 做了两件事:

  1. 在内存中划出一块空间,存入数字 18
  2. 给这个空间贴上标签 age,以后你叫 age,Python 就知道要找那个数字 18。

从此,age 就代表数字 18,你可以用它来计算、输出、修改:

PYTHON
age = 18
print(age)       # 输出 18
print(age + 5)   # 输出 23
age = 20         # 换个值,盒子里的内容变了
print(age)       # 输出 20
💡 提示:变量之所以叫"变量",是因为它的值可以。第一次赋值是 age = 18,后面改成 age = 20,同一个名字可以指向不同的值。这在编程中非常关键。



2. 变量的命名规则

Python 对变量名有一些硬性规定和约定俗称的规范:

(1) 必须遵守(否则报错)

规则 正确的例子 错误的例子
只能包含字母、数字、下划线 my_nameage2 my-name(短横线不可以)
不能以数字开头 name1 1name
不能是 Python 的关键字 my_if if(if 是关键字)
区分大小写 nameName 是两个不同的变量

Python 的关键字(也叫保留字)有 35 个,比如 ifforwhileimportclassdefreturn 等。这些词是 Python 语法的一部分,不能用来做变量名。

(2) 建议遵守(规范写法,PEP 8)

PEP 8 是 Python 的官方代码风格指南,业界普遍遵守:

PYTHON
# 好名字(一眼就懂)
total_price = 99.9
student_count = 35

# 差名字(看了也不知道在干嘛)
a = 99.9
b = 35
💡 提示:好代码的第一条标准是"别人不用注释也能看懂你的意图"。变量命名就是第一步。花 5 秒钟想一个好名字,是在给未来读代码的自己节省 5 分钟。



3. 基本数据类型

Python 中常用的基本数据类型有 5 种:

类型名称 Python 写法 示例 说明
整数 int 42-11000 没有小数点的整数
浮点数 float 3.14-0.52.0 带小数点的数
字符串 str "你好"'Python' 文本,用引号包着
布尔值 bool TrueFalse 表示真/假,首字母大写
空值 NoneType None 表示"什么都没有",首字母大写
PYTHON
# 每个类型定义一个变量
age = 25              # int,整数
price = 19.99         # float,浮点数
name = "Charlie"         # str,字符串
is_student = True     # bool,布尔值
result = None         # NoneType,空值

print(age)            # 输出 25
print(price)          # 输出 19.99
print(name)           # 输出 Charlie
print(is_student)     # 输出 True
print(result)         # 输出 None

(1) 用 type() 查看类型

如果你不确定一个变量是什么类型,可以用 type() 函数检查:

PYTHON
print(type(42))        # <class 'int'>
print(type(3.14))      # <class 'float'>
print(type("Hello"))   # <class 'str'>
print(type(True))      # <class 'bool'>
print(type(None))      # <class 'NoneType'>

(2) 动态类型

Python 是动态类型语言,意思是同一个变量可以先后存放不同类型的值:

PYTHON
x = 10         # 此时 x 是整数
print(x)       # 输出 10
x = "你好"     # 同一变量,变成字符串
print(x)       # 输出 你好
x = True       # 又变成布尔值
print(x)       # 输出 True

这在 C++ 或 Java 这样的静态类型语言中是不允许的——声明时是什么类型,一辈子就是什么类型。动态类型的优点是灵活、代码简洁,缺点是一个变量不小心被改了类型,可能导致运行时错误(后面会看到例子)。

⚠️ 注意:动态类型虽然灵活,但不建议滥用。实际项目中,尽量让一个变量只存放一种类型的数据,避免把自己搞晕。



4. print() 的更多用法

第01课我们已经见了 print(),这里补充两个常用技巧:

(1) 用逗号输出多个值

PYTHON
name = "Diana"
age = 22
print("我叫", name, ",今年", age, "岁")
# 输出:我叫 Diana ,今年 22 岁

print() 的多个参数之间会自动加一个空格。如果想去掉这个空格,或者用其他符号分隔,可以用 sep 参数:

PYTHON
print("2026", "06", "19", sep="-")
# 输出:2026-06-19

(2) 用 end 控制结尾

默认情况下,print() 会在输出内容后面加一个换行。用 end 参数可以改变这个行为:

PYTHON
print("第一行", end=" → ")
print("第二行", end=" → ")
print("第三行")
# 输出:第一行 → 第二行 → 第三行


5. f-string:在字符串中插入变量

你已经在前面的例子中见过 f"你好,{name}" 这种写法了。它叫 f-string(格式化字符串),是 Python 中最常用的字符串格式化方式。简单说就是:在字符串前面加一个 f,然后在里面用 {} 把变量名包起来,Python 就会把变量的值替换进去。

PYTHON
name = "Diana"
age = 22
print(f"我叫{name},今年{age}岁。")
# 输出:我叫Diana,今年22岁。

花括号里不只是放变量名,还可以放表达式

PYTHON
a = 10
b = 3
print(f"{a} + {b} = {a + b}")   # 输出:10 + 3 = 13
print(f"{a} × {b} = {a * b}")   # 输出:10 × 3 = 30

还可以控制数字的显示格式:

PYTHON
pi = 3.14159265
print(f"π = {pi}")              # 输出:π = 3.14159265
print(f"π ≈ {pi:.2f}")          # 输出:π ≈ 3.14(保留2位小数)
print(f"π ≈ {pi:.4f}")          # 输出:π ≈ 3.1416(保留4位小数)

# 大数字加千分位分隔符
big = 1234567
print(f"{big:,}")               # 输出:1,234,567
💡 提示:.2f 中的冒号后面是格式说明——. 表示小数,2 是小数位数,f 表示浮点数。:, 表示加千分位逗号。记不住不要紧,知道有这回事就行,用多了自然就熟了。



6. 示例

▶ 示例 1:用变量记录个人信息(难度⭐)

这个例子展示了如何用变量存储个人信息,并在输出中引用它们。

PYTHON
# 用变量记录个人信息
name = "Alice"           # 字符串——用引号包起来的文本
age = 28                # 整数——不带小数点的数字
height = 1.75           # 浮点数——带小数点的数字
is_programmer = True    # 布尔值——要么 True,要么 False

# 用 f-string 把变量的值嵌入到输出的文本中
# f 前缀告诉 Python:花括号 {} 里面是变量名,把它替换成具体的值
print(f"姓名:{name}")
print(f"年龄:{age} 岁")
print(f"身高:{height} 米")
print(f"是否在学编程:{is_programmer}")

# 估算一下年龄和身高的关系(纯娱乐)
print(f"{name} 的身高是年龄的 {height / age:.3f} 倍")
▶ 试一试

运行结果:

TEXT 📖 仅展示
姓名:Alice
年龄:28 岁
身高:1.75 米
是否在学编程:True
Alice 的身高是年龄的 0.062 倍

这里有一个小细节:{height / age:.3f} 中的 :.3f 表示"保留 3 位小数",控制数字的显示格式。

▶ 示例 2:变量之间的运算(难度⭐⭐)

不同类型的变量,可以做不同的运算。但有些运算规则需要留意。

PYTHON
# 数值运算
a = 10
b = 3
print(f"{a} + {b} = {a + b}")    # 加法:13
print(f"{a} - {b} = {a - b}")    # 减法:7
print(f"{a} * {b} = {a * b}")    # 乘法:30
print(f"{a} / {b} = {a / b}")    # 除法:3.333...(结果是浮点数)
print(f"{a} // {b} = {a // b}")  # 整除:3(只保留整数部分)
print(f"{a} % {b} = {a % b}")    # 取余:1(10 ÷ 3 = 3 余 1)
print(f"{a} ** {b} = {a ** b}")  # 幂运算:10³ = 1000

# 字符串拼接
first_name = "张"
last_name = "三"
full_name = first_name + last_name   # + 在字符串中的作用是拼接
print(f"全名:{full_name}")

# 类型不同不能混用
# 下面的代码会报错,因为不能把字符串和数字加起来
# result = "年龄:" + 25    ← 取消注释试试看
▶ 试一试

运行结果:

TEXT 📖 仅展示
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3.3333333333333335
10 // 3 = 3
10 % 3 = 1
10 ** 3 = 1000
全名:Alice
⚠️ 注意+ 在数字之间是加法,在字符串之间是拼接。但字符串和数字之间不能用 +——Python 不会自动帮你把数字转成字符串。如果非要拼接,可以手动转换:"年龄:" + str(25)str() 函数可以把其他类型转成字符串。

▶ 示例 3:多重赋值与交换变量(难度⭐⭐⭐)

Python 有一些简洁的写法,让代码更优雅:

PYTHON
# 一行给多个变量赋值
x, y, z = 10, 20, 30
print(f"x={x}, y={y}, z={z}")   # x=10, y=20, z=30

# 交换两个变量的值——在其他语言里需要额外一个临时变量
# 但在 Python 中一行搞定
a, b = 5, 10
print(f"交换前:a={a}, b={b}")

a, b = b, a  # 神奇的一行
print(f"交换后:a={a}, b={b}")

# 给多个变量赋同一个值
p = q = r = 0
print(f"p={p}, q={q}, r={r}")   # p=0, q=0, r=0
▶ 试一试

运行结果:

TEXT 📖 仅展示
x=10, y=20, z=30
交换前:a=5, b=10
交换后:a=10, b=5
p=0, q=0, r=0

a, b = b, a 之所以能交换,是因为 Python 在执行赋值之前,会先计算等号右边的所有表达式,把结果存起来,然后一次性赋给左边的变量。整个过程是安全的。

💡 提示:这种"Python 风格"的写法看起来很酷,但用多了会让不熟悉 Python 的人看不懂。在团队项目中,适度使用就好。



7. 常见应用场景


❓ 常见问题

Q float 类型为什么不精确?0.1 + 0.2 为什么等于 0.30000000000000004
A 这不是 Python 的问题,而是计算机底层用二进制存储浮点数的固有限制。就像十进制无法精确表示 1/3 = 0.333... 一样,二进制也无法精确表示 0.10.2。如果你需要精确计算(比如处理金额),用 decimal 模块(后面会讲到),不要用 float
Q None0、空字符串 "" 有什么区别?
A None 表示"什么都没有"、"值不存在",它和 0""False 都不是一回事。0 是一个数字,"" 是一个空字符串,False 是布尔假值——它们都是"有东西的",只是恰好表示"没有内容"。而 None 是"连容器都没有"。想象一下:"" 是一个空碗,None 是连碗都没有。

📖 小节


📝 作业

  1. 基础题(难度⭐):定义三个变量 citytemperatureis_sunny,分别存储你所在的城市名、今日温度(浮点数)、是否是晴天(布尔值),然后用 print() 输出一句完整的描述。

  2. 进阶题(难度⭐⭐):定义两个整数变量 minuteshours,把 hours 转换成分钟数,加上 minutes,输出总共有多少分钟。比如 hours=2, minutes=15 应输出 135 分钟。提示:1 小时 = 60 分钟。

  3. 挑战题(难度⭐⭐⭐):不使用临时变量,交换三个变量的值,实现循环移位:a → b → c → a(即 a 的新值是 b 原来的值,b 的新值是 c 原来的值,c 的新值是 a 原来的值)。提示:核心思路是 a, b, c = b, c, a

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏