Python 变量

变量是编程里最基础的概念——给数据"起个名字",方便后续使用。Python 的变量机制和 C/Java 有很大不同:不需要声明类型、赋值即定义,这一章我们彻底搞懂。

1. 什么是变量?

把变量想象成一个贴了标签的盒子,盒子里装数据,标签是名字。你想用数据,就喊标签名。

# 赋值即定义:不需要提前声明类型
name = "小明"
age = 20
height = 1.75
is_student = True

# 用 type() 查看变量的类型
print(type(name))         # <class 'str'>
print(type(age))          # <class 'int'>
print(type(height))       # <class 'float'>
print(type(is_student))   # <class 'bool'>

# 同一个变量可以反复赋不同类型的值(动态类型)
x = 100          # x 是 int
x = "hello"      # 现在 x 是 str
x = [1, 2, 3]    # 现在 x 是 list
print(type(x))   # <class 'list'>

几个关键点:

2. 命名规则

变量名不是随便起的,有硬性规则和软性约定:

3. 多重赋值与解包(超实用)

Python 在变量赋值上有一些非常优雅的写法,其他语言往往要写好几行:

# 1. 多重赋值:一行给多个变量赋不同的值
name, age, city = "小明", 20, "北京"
print(name, age, city)   # 小明 20 北京

# 2. 链式赋值:多个变量赋同一个值
a = b = c = 0
print(a, b, c)           # 0 0 0

# 3. 经典应用:一行交换两个变量的值(不需要中间变量)
a, b = 1, 2
a, b = b, a
print(a, b)              # 2 1

# 4. 解包:把列表/元组的元素依次赋给变量
point = (3, 4, 5)
x, y, z = point
print(x, y, z)           # 3 4 5

# 5. 用 * 收集多余元素
first, *rest = [1, 2, 3, 4, 5]
print(first)             # 1
print(rest)              # [2, 3, 4, 5]

其中一行交换两个变量是经典 Python 写法。在 C/Java 里你需要写三行(借助临时变量),Python 一行搞定,而且可读性更好。

4. 全局变量与 local/global

变量有"作用域"——在哪里能访问它。函数内部定义的是局部变量,只在函数里有效;函数外部定义的是全局变量,所有地方都能读。

# 全局变量:在函数外定义
counter = 0

def increment():
    # ⚠ 不加 global,Python 会创建一个局部变量
    # 而不是修改全局 counter
    global counter       # 声明:我要用的是外面的 counter
    counter += 1

increment()
increment()
increment()
print(counter)           # 3

# 不推荐过度使用 global,大项目里会让代码难追踪
# 更好的做法是:用参数传入,用 return 返回

注意陷阱:在函数内部给一个全局变量赋值,如果不写 global,Python 会以为你想新建一个同名的局部变量,全局变量并不会被修改。这是新手常踩的坑。

5. 作用域 LEGB 规则(进阶)

Python 查找一个变量名时,按 LEGB 顺序逐层找:

找到第一个就停止。所以不要用内置名字做变量名(如 list = [1,2]str = "hi"),否则同名内置函数就被"覆盖",后面用不了了。

6. 常量约定

很多语言有 const 关键字定义常量,Python 没有。约定俗成的做法:用全大写+下划线的名字表示"不应被修改"的常量。

# Python 没有真正的"常量"语法
# 约定:全大写名字表示"不应被修改"的常量
MAX_SIZE = 100
PI = 3.14159
APP_NAME = "我的应用"

print(MAX_SIZE, PI, APP_NAME)

# 但 Python 不会阻止你修改它(只是约定)
MAX_SIZE = 200    # 语法上能跑,但你不应该这么做

这只是社区约定——Python 不会真的阻止你修改 MAX_SIZE。这种"靠自律"的设计体现了 Python 的哲学:程序员是成年人,知道自己在干什么。

7. 删除变量 del

del 可以删除一个变量,让它"消失"。

name = "小明"
print(name)        # 小明

# 用 del 删除变量,之后再用就报错
del name

# print(name)      # ❌ NameError: name 'is not defined'

实际开发中很少用到 del,理解即可。

8. 变量是"引用"(重要概念)

Python 变量存的是对象的引用(类似指针),不是对象本身。看这个经典例子:

a = [1, 2, 3]
b = a           # b 和 a 指向同一个列表(不是复制)
b.append(4)
print(a)        # [1, 2, 3, 4]   <- a 也变了!

# 想要独立副本,用 copy
c = a.copy()    # 或者 a[:]、list(a)
c.append(5)
print(a)        # [1, 2, 3, 4]   <- 这次 a 没变
print(c)        # [1, 2, 3, 4, 5]

这个知识点在处理列表、字典等"可变对象"时极其关键,后面讲列表时会再强调一遍。

小结

变量是给数据贴标签。Python 的变量动态类型(赋值即定义,类型随时变)、命名用 snake_case作用域按 LEGB 查找常量靠全大写约定。下一篇我们看 Python 的数据类型——整数、浮点、布尔到底有什么细节。

← 上一篇 Python 基础语法

下一篇 Python 数据类型

✈️💬