Appearance
03|变量与数据类型
程序需要记录和操作数据。变量是给数据起的名字,数据类型决定了这个数据能做什么操作。
Python 是动态类型语言——变量类型在运行时自动推断,不需要像 C 或 Go 那样先声明类型。但这不意味着类型不重要:把字符串和数字直接相加会报错,把 None 当字符串调用方法也会出问题。
一、变量赋值
python
name = "Alice"
age = 25
score = 98.5
passed = True赋值语句的格式是变量名 = 值。等号右边先计算,然后把结果绑定到左边的名字上。
变量名规则:
- 只能包含字母、数字和下划线
- 不能以数字开头
- 区分大小写(
Name和name是两个变量) - 不能使用 Python 关键字(如
if、for、class)
Python 风格(PEP 8)建议变量名用小写加下划线:
python
student_name = "Alice"
total_score = 100二、基础数据类型
python
# 整数 int
count = 42
type(count) # <class 'int'>
# 浮点数 float
price = 19.99
type(price) # <class 'float'>
# 字符串 str
greeting = "hello"
type(greeting) # <class 'str'>
# 布尔值 bool
is_valid = True
type(is_valid) # <class 'bool'>
# 空值 NoneType
result = None
type(result) # <class 'NoneType'>type() 函数返回对象的类型。类型检查在调试时很有用——尤其是遇到"预期是数字但实际是字符串"这类错误时。
三、查看和判断类型
python
value = 42
# 查看类型
type(value) == int # True
isinstance(value, int) # True,推荐用这个
isinstance(value, (int, float)) # True,判断是否是多个类型之一isinstance() 比 type() == 更灵活。它支持判断子类关系(例如自定义类继承自 list,isinstance(obj, list) 也会返回 True),还支持传入类型元组一次判断多个类型。
四、变量重新赋值
Python 允许给同一个变量赋不同类型的值:
python
x = 10
x = "ten"这种灵活性是双刃剑。代码变长后,变量类型频繁变化会增加理解成本。好的实践是:一个变量尽量只承载一种类型的数据,需要不同类型时用新变量。
五、常量约定
Python 没有真正的常量(无法阻止重新赋值)。按约定,全大写的变量名表示"不应该修改":
python
MAX_RETRIES = 3
PI = 3.14159
DEFAULT_TIMEOUT = 30这只是命名约定,Python 不会阻止修改。团队内部统一这个约定,能传达"这个值是配置项,改动前要三思"的信息。
六、多重赋值
Python 支持同时给多个变量赋值:
python
a, b = 1, 2
x = y = z = 0 # 三个变量都指向同一个值交换两个变量的值不需要临时变量:
python
a, b = 10, 20
a, b = b, a # 现在 a=20, b=10这个特性来自元组解包——等号右边先打包成元组,再解包到左边的变量。
七、删除变量
python
x = 10
del x
print(x) # NameError: name 'x' is not defineddel 不是删除内存中的对象,而是删除变量名到对象的绑定关系。如果对象还有其他引用,它不会被回收。日常代码中很少需要手动 del,Python 的垃圾回收机制会自动处理不再使用的对象。
记忆锚点:Python 动态类型但类型仍然重要;isinstance() 比 type() == 更灵活;全大写表示常量约定;多重赋值 a, b = b, a 直接交换;del 删除的是变量名不是对象。