当前位置:首页>python>python笔记系列之——变量

python笔记系列之——变量

  • 2026-10-11 07:50:45
python笔记系列之——变量

小朋友们,你们好!欢迎来到Python魔法课堂。今天我们要学习一个非常基础但又超级重要的概念——变量。

你有没有想过,电脑是怎么记住你输入的名字、年龄、喜欢的食物的?就像你有一个小本子,可以在上面记下各种信息,然后随时翻看。在Python里,这个“小本子”就是变量。

学会了变量,你的程序就能“记住”东西,变得更聪明、更灵活!准备好了吗?让我们开始今天的冒险!


一、变量的本质

1.1 变量是什么?给数据贴标签

想象一下,你有一个漂亮的存钱罐。你在罐子上贴了一张标签,写着“我的零花钱”。从此以后,只要看到这个标签,你就知道里面存的是零花钱。而且,你可以随时往里面加钱,或者取出一部分——罐子里的钱会变化,但标签“我的零花钱”一直没变。

在Python里,变量就相当于这个标签。它不存数据本身,而是指向存放数据的地方。你可以给数据起一个名字,然后通过这个名字来使用数据。

name = "小明"age = 10
  • name 是一个变量,它指向了字符串 "小明"。

  • age 是一个变量,它指向了整数 10。

当你使用 print(name) 时,Python 会根据 name 这个标签,找到它指向的数据 "小明",然后打印出来。

1.2 赋值运算符 = —— 把数据放进变量

在Python里,把数据“放进”变量的符号是 =,这叫赋值运算符。它的左边是变量名,右边是值(或者能算出值的表达式)。

x = 5          # 把整数5赋给变量xy = "hello"    # 把字符串"hello"赋给变量yz = 3 + 2      # 先计算右边3+2=5,再把5赋给z

重点:= 不是数学里的等号,而是把右边的结果存到左边的变量里。

赋值的过程:Python 总是先计算等号右边的表达式,然后把结果赋给左边的变量。

x = 2x = x + 3      # 右边 x+3=5,然后把5赋给xprint(x)       # 5

区分赋值 = 和相等比较 ==:

  • x = 5 → 把5放进x(赋值)

  • x == 5 → 问“x等于5吗?”(比较,结果是True或False)

a = 10b = (a == 10)   # 先比较a==10,得到True,然后把True赋给bprint(b)        # 输出 True

1.3 变量的底层原理——内存小仓库的故事

为了让你们彻底理解变量,我们来讲一个“内存小仓库”的故事。

内存就像一排排小抽屉假设计算机的内存是一排排带编号的小抽屉。每个抽屉都有一个独一无二的号码(就像你的学号)。抽屉里可以放数据(数字、文字等)。

当你写 x = 5 时,Python 会做三件事:

  1. 找一个空抽屉,把数字 5 放进去(假设抽屉编号是 10086)。

  2. 在另一个地方记住:变量 x 指向抽屉 10086。

  3. 以后你写 print(x),Python 就去抽屉 10086 里取出 5。

变量改名会怎样?如果你接着写 x = 10,Python 会再找一个新抽屉(比如 10087),把 10 放进去,然后把 x 的指向改为 10087。旧的抽屉 10086 里的 5 如果不再被任何变量指向,就会被清理掉(这叫垃圾回收)。

a = 5print(id(a))   # 输出一个数字,比如 140735310356784a = 10print(id(a))   # 输出另一个不同的数字

id() 函数可以查看变量指向的抽屉编号(内存地址)。你会发现两次地址不同,说明指向了不同的抽屉。

为什么变量可以指向不同类型的数据?因为变量只是标签,不是抽屉本身。标签可以随便贴到任何抽屉上。所以同一个变量可以先指向数字,再指向字符串,再指向列表。

var = 100       # 指向数字抽屉var = "Python"  # 指向字符串抽屉var = [1,2,3]   # 指向列表抽屉

两个变量指向同一个抽屉(引用)如果你写 a = [1, 2, 3] 和 b = a,那么 a 和 b 两个标签都贴在同一个抽屉上。通过 b 修改抽屉里的内容,a 也会看到变化。

a = [1, 2, 3]b = a          # b 也指向同一个列表b.append(4)print(a)       # [1, 2, 3, 4]   a 也变了!

如果想复制一个独立的列表,可以用 b = a[:] 或 b = a.copy(),这样会新开一个抽屉。

1.4 变量赋值的多种方法(让代码更简洁)

除了基本的 变量 = 值,Python 还提供了几种好用的赋值技巧。

平行赋值(同时给多个变量赋值)

a, b, c = 1, 2, 3print(a, b, c)   # 1 2 3

链式赋值(多个变量指向同一个值)

x = y = z = 100print(x, y, z)   # 100 100 100

增量赋值(自己更新自己)

count = 0count += 5    # 等价于 count = count + 5count *= 2    # 等价于 count = count * 2# 还有 -=, /=, //=, %=, **= 等

试试看:

  • 用平行赋值把 "苹果", "香蕉", "橙子" 分别赋给 fruit1, fruit2, fruit3,然后打印。

  • 用增量赋值写一个程序:初始 score = 80,然后加10分,再乘2,最后打印结果。

  • 用 id() 查看两个链式赋值的变量是否指向同一个地址。


二、为什么需要变量?——让程序记住东西

如果没有变量,你每次要使用一个数据,都得重新写一遍。比如,你要打印三次“你好”,就得写三次 print("你好")。但如果有了变量,就可以这样:

count = 0count += 5    # 等价于 count = count + 5count *= 2    # 等价于 count = count * 2# 还有 -=, /=, //=, %=, **= 等

如果以后想把“你好”改成“大家好”,只需要改一处地方,非常方便!

变量让程序:

  • 更简洁:不用重复写相同的数据。

  • 更灵活:可以随时改变变量的值。

  • 更易读:给数据起一个好名字,让人一看就懂。

试试看:定义一个变量 pi = 3.14,然后用它计算一个圆的面积(半径5)。公式:面积 = pi × 半径²。


三、变量的命名规则——取个响亮好记的名字

给变量起名字可不是随便乱起的,要遵守一些规则,否则Python会生气。

必须遵守的规则(否则会报错):

  1. 只能由字母、数字、下划线 _ 组成,不能有空格或其他符号。

  2. 不能以数字开头。比如 1var 是错误的,var1 可以。

  3. 不能是Python的关键字(后面会讲)。

  4. 区分大小写,Name 和 name 是两个不同的变量。

# 正确的变量名my_name = "小明"age2 = 10_private = "秘密"
# 错误的变量名2nd_place = "亚军"   # 数字开头my-name = "小明"     # 连字符不允许class = "三年级"     # class 是关键字

建议的命名风格(让代码更优雅):

  • 见名知意:用有意义的名字,比如 score 比 s 好。

  • 使用下划线分隔:student_name 比 studentname 更易读。

  • 常量用全大写:PI = 3.14(虽然Python不强制,但习惯这样表示不变的值)。

练习:判断变量名是否合法

下面有40个变量名,请你判断哪些是合法的,哪些是不合法的,并说出原因。你可以在Python交互环境中测试。

序号
变量名
合法?
原因
1
name
✅
全部字母
2
2name
❌
数字开头
3
_score
✅
下划线开头允许
4
my-name
❌
包含连字符(不允许)
5
hello_world
✅
字母、下划线,合法
6
class
❌
是关键字
7
Class
✅
关键字区分大小写,Class不是保留字(但建议避免)
8
student_age
✅
合法
9
123
❌
纯数字开头
10
_
✅
单下划线合法
11
for
❌
关键字
12
For
✅
不是关键字(大小写不同)
13
try
❌
关键字
14
try1
✅
包含关键字但整体不是关键字
15
@name
❌
包含@符号
16
True
❌
是关键字(布尔值)
17
true
✅
不是关键字(但建议不要用,容易混淆)
18
None
❌
是关键字
19
nonlocal
❌
是关键字
20
_____
✅
多个下划线合法
21
a1b2
✅
字母数字混合,合法
22
1a2b
❌
数字开头
23
姓名
✅
中文变量名(合法但不推荐)
24
年龄
✅
中文变量名(合法但不推荐)
25
return_value
✅
合法
26
return
❌
关键字
27
is_ok
✅
合法
28
is
❌
关键字
29
while_loop
✅
合法
30
while
❌
关键字
31
apple
✅
合法
32
apple2
✅
合法
33
apple_2
✅
合法
34
apple-name
❌
连字符
35
apple_name
✅
合法
36
__init__
✅
合法(前后双下划线,特殊用途)
37
你好
✅
中文合法
38
123你好
❌
数字开头
39
print
❌
内置函数名,虽然不是关键字,但强烈不建议(会覆盖原函数)
40
PRINT
✅
不是内置函数,但容易混淆

额外挑战:从下面随机列表中挑出所有合法的变量名:

2cool, cool2, _cool, cool_, cool-name, cool_name, lambda, Lambda, and, And, __cool__, cool123, 123cool

提示:可以在Python交互环境中快速验证,例如:

>>> apple = 1          # 不报错即合法>>> 2apple = 1         # 会报错 SyntaxError: invalid syntax

自己出题:再想出5个合法的变量名和5个不合法的变量名,交换给同桌判断。


四、Python关键字——不能用作变量名的“特权词”

Python 有一些单词已经被“征用”了,有特殊含义,所以你不能用它们做变量名。这些就是关键字(也叫保留字)。

Python 3 的关键字有:

False, True, None, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield

你可以用以下代码查看当前Python版本的所有关键字:

import keywordprint(keyword.kwlist)

注意:True, False, None 也是关键字,不能作为变量名。

试试看:尝试用 if 作为变量名,看看会报什么错误。


五、交换两个变量的值

交换两个变量的值是一个经典问题。想象你有两个杯子,一个装牛奶,一个装果汁,你想交换它们的内容。下面我们来看几种方法,其中方法一和方法二是必须掌握的,方法三是拓展知识。

方法一:使用临时变量(最通用、最安全)

这个方法就像找一个空杯子作为中转。我们把一个值先放在空杯子里,然后交换。

a = 10b = 20temp = a   # temp 现在装着 a 的旧值 (10)a = b      # a 变成 b 的值 (20)b = temp   # b 变成之前存起来的 temp (10)print(a, b)  # 输出 20 10

步骤图解:

  1. temp = a → 把 a 的值(10)保存到 temp。

  2. a = b → a 被覆盖为 b 的值(20)。

  3. b = temp → b 得到 temp 里保存的旧值(10)。

优点:适用于任何类型(数字、字符串、列表等),不会出错。缺点:需要多一个变量。

方法二:使用Python特有的平行赋值(最简洁、最推荐)

Python 允许你在一行中交换两个变量的值,根本不需要临时变量!

a = 10b = 20a, b = b, a   # 交换!print(a, b)   # 输出 20 10

这行代码的含义是:先把右边的 b, a 打包成一个元组 (20, 10),然后按顺序解包赋值给左边的 a, b。效果完美,而且超级简单。

优点:一行搞定,可读性高,Python 特色。缺点:无(只要记住语法)。

方法三:使用加减法(仅适用于数字,不推荐)

这是一种“数学小魔术”,但有风险,只适用于纯数字,而且可能导致溢出(数字太大时)。

a = 10b = 20a = a + b   # a 变成 30b = a - b   # b 变成 30 - 20 = 10a = a - b   # a 变成 30 - 10 = 20print(a, b)  # 输出 20 10

原理:

  1. a = a + b 让 a 变成两数之和。

  2. b = a - b 从和中减去原 b,得到原 a,赋给 b。

  3. a = a - b 从和中减去新的 b(即原 a),得到原 b,赋给 a。

缺点:

  • 只能用于数字。

  • 如果数字很大,相加可能超过整数范围(虽然Python整数无限大,但性能会变差)。

  • 容易让人困惑,不如方法一清晰。

总结:平时写代码,用平行赋值 a, b = b, a 就够啦!如果面试中要求不用临时变量,可以用加减法;但一般情况下,推荐使用平行赋值。

试试看:

  1. 写一段代码,交换 x = "苹果" 和 y = "香蕉" 的值,然后用 print 验证。

  2. 用三种方法分别交换 p = 100 和 q = 200,观察结果是否一致。

  3. 尝试交换 m = 3.14 和 n = 2.71,看看哪些方法能用,哪些不能用?


六、冷门知识点——高手才知道的秘密

1. 变量本身没有类型,值才有类型

在Python中,变量只是一个“标签”,它可以指向任何类型的值。同一个变量可以先后指向数字、字符串、列表等。

var = 10       # var 是整数var = "hello"  # 现在 var 是字符串var = [1,2,3]  # 现在 var 是列表

2. 删除变量:del

你可以用 del 删除一个变量,之后就不能再使用它了。

a = 10del aprint(a)   # 报错:NameError

3. 变量的作用域(简单提及)(选读)

变量有“地盘”概念,我们会在函数课程中详细学习。简单说,在函数内部赋值的变量是局部变量,外面看不到;在函数外赋值的变量是全局变量。

global_var = 100   # 全局变量def test():    local_var = 50 # 局部变量    print(global_var) # 可以读取全局变量test()print(local_var)   # 报错

4. is 和 == 的区别

== 比较两个变量的值是否相等;is 比较两个变量是否指向同一个对象(即内存地址相同)。

a = [1,2,3]b = [1,2,3]print(a == b)   # True,值相等print(a is b)   # False,不同对象c = aprint(a is c)   # True,指向同一个对象

5. 变量名可以用中文(但不推荐)

Python 3 支持 Unicode 标识符,所以你甚至可以用中文做变量名。

姓名 = "小明"年龄 = 10print(姓名, "今年", 年龄, "岁")

虽然可以,但不建议,因为可能引起兼容性问题,而且不符合国际惯例。

6. 使用 _ 作为临时变量

有时候我们不需要某个值,可以用下划线 _ 作为变量名,表示“这个值我不关心”。

for _ in range(5):    print("Hello")

7. 变量解包(高级平行赋值)(选读)

a, *rest = [1, 2, 3, 4]print(a)      # 1print(rest)   # [2, 3, 4]

*rest 会收集剩余的元素到一个列表中。

8. 增量赋值的扩展(*=, /=, 等)

增量赋值不仅适用于数字,也适用于字符串、列表等。

s = "Hi"s *= 3print(s)      # "HiHiHi"lst = [1, 2]lst += [3, 4]print(lst)    # [1, 2, 3, 4]

七、综合小挑战

  1. 交换三个变量:写出代码,按 a, b, c = 1, 2, 3,通过一系列交换,变成 a=3, b=1, c=2。提示:可以多次使用 a, b = b, a 这样的交换。

  2. 温度转换:创建一个变量 celsius = 25,编写代码计算华氏度,公式:fahrenheit = celsius * 9/5 + 32,并将结果赋给新变量 fahrenheit,然后打印。

  3. 统计输入:让用户输入三个数字,用三个变量存储,然后计算它们的和与平均值。

  4. 判断变量类型:定义一个变量 x = 100,然后用 type(x) 查看它的类型,再把它改为字符串 "hello",再次查看类型。

  5. 变量引用实验:创建列表 a = [1, 2],然后用 b = a,再修改 b[0] = 99,打印 a,观察变化。再用 c = a[:],修改 c[1] = 88,打印 a,再次观察。

  6. 终极交换题:不用平行赋值,也不用临时变量,只用加减法交换两个数字。写出代码并测试。

  7. 变量名大闯关:根据第三部分的规则,自己写出10个合法的变量名和10个不合法的变量名,并让朋友验证。


八、总结

今天我们学习了变量的魔法:

  • 变量的本质:变量是标签,指向内存中的“抽屉”;赋值 = 是把右边结果存入左边变量;内存中每个数据都有唯一编号 id;多个变量可以指向同一个对象。

  • 为什么需要变量:让程序记住信息,更简洁灵活。

  • 赋值方法:普通赋值、平行赋值、链式赋值、增量赋值。

  • 命名规则:字母数字下划线,不能数字开头,不能是关键字。

  • 关键字:Python 保留的单词,不能用作变量名。

  • 交换变量:三种方法,推荐 a, b = b, a。

  • 冷门知识:变量无类型、引用概念、del 删除、is vs ==、中文变量名等。

变量是编程的基石,每一个程序都离不开它们。从现在起,养成给变量起好名字的习惯,并记住:变量是标签,不是盒子;赋值是把标签贴到新东西上。

最后的小作业:写一个程序,用变量记录你的一天:早上几点起床、早餐吃了什么、上了什么课、晚上几点睡觉。然后用 print 把它们连成一段话。再交换“早餐”和“晚餐”的变量值,观察变化。最后,用 id() 打印每个变量指向的地址。

最新文章

随机文章