Python 变量与数据类型核心指南
概述
变量和数据类型是编程的基石。在 Python 中,变量就像是一个个容器,用来存储数据;而数据类型则决定了这个容器能装什么、以及能对里面的数据做什么操作。
数据类型概览
Python 的数据类型主要分为基本类型和复合类型两大类:
数据类型 ├── 基本数据类型 │ ├── 数字类型 (Numbers) │ ├── 字符串类型 (String) │ ├── 布尔类型 (Boolean) │ └── None 类型 └── 复合数据类型 ├── 列表类型 (List) ├── 元组类型 (Tuple) ├── 字典类型 (Dictionary) └── 集合类型 (Set)
实战代码示例
下面我们通过一段完整的代码来演示这些类型的声明、使用及特性。注意观察 type() 函数的输出,它能帮你确认变量的实际类型。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 1. 数字类型 (Numbers)
print("=== 数字类型 ===")
# 整数 (Integer)
age = 25
print(f"整数示例 - 年龄:{age} (类型:{type(age)})")
# 浮点数 (Float)
height = 175.5
print(f"浮点数示例 - 身高:{height}cm (类型:{type(height)})")
# 复数 (Complex)
complex_num = 3 + 4j
print(f"复数示例:{complex_num} (类型:{type(complex_num)})")
# 布尔值 (Boolean) - 实际上是 int 的子类
is_student = True
is_employed = False
print(f"布尔值示例 - 是学生:{is_student} (类型:{type(is_student)})")
print(f"布尔值示例 - 已就业:{is_employed} (类型:{type(is_employed)})")
print("\n")
# 2. 字符串类型 (String)
print("=== 字符串类型 ===")
# 单引号字符串
name = '张三'
print(f"单引号字符串:{name}")
# 双引号字符串
message = "Hello, World!"
print(f"双引号字符串:{message}")
# 三引号字符串(多行字符串)
multiline_text = """
这是一个 多行 字符串示例
"""
print(f"三引号字符串:{multiline_text}")
# 字符串格式化 (f-string, Python 3.6+ 特性)
formatted_str = f"姓名:{name}, 年龄:{age}"
print(f"F-string 格式化:{formatted_str}")
print("\n")
# 3. 列表类型 (List) - 可变有序序列
print("=== 列表类型 ===")
fruits = ['苹果', '香蕉', '橙子']
print(f"水果列表:{fruits} (类型:{type(fruits)})")
# 访问列表元素
print(f"第一个水果:{fruits[0]}")
# 修改列表元素
fruits[1] = '葡萄'
print(f"修改后的水果列表:{fruits}")
# 添加元素
fruits.append('草莓')
print(f"添加草莓后的列表:{fruits}")
print("\n")
# 4. 元组类型 (Tuple) - 不可变有序序列
print("=== 元组类型 ===")
coordinates = (10, 20)
print(f"坐标元组:{coordinates} (类型:{type(coordinates)})")
# 元组解包
x, y = coordinates
print(f"解包后 - x: {x}, y: {y}")
print("\n")
# 5. 字典类型 (Dictionary) - 键值对集合
print("=== 字典类型 ===")
person = {'name': '李四', 'age': 30, 'city': '北京'}
print(f"人员信息字典:{person} (类型:{type(person)})")
# 访问字典值
print(f"姓名:{person['name']}")
# 添加新的键值对
person['occupation'] = '工程师'
print(f"添加职业后的字典:{person}")
print("\n")
# 6. 集合类型 (Set) - 无序不重复元素集合
print("=== 集合类型 ===")
unique_numbers = {1, 2, 3, 3, 4, 4, 5}
print(f"唯一数字集合:{unique_numbers} (类型:{type(unique_numbers)}, 注意重复元素被去除)")
# 集合操作
set_a = {1, 2, 3}
set_b = {3, 4, 5}
union_result = set_a | set_b
print(f"并集:{union_result}")
intersection_result = set_a & set_b
print(f"交集:{intersection_result}")
print("\n")
# 7. 类型转换 (Type Conversion)
print("=== 类型转换 ===")
str_num = "123"
int_num = int(str_num)
print(f"字符串 '{str_num}' 转整数:{int_num} (类型:{type(int_num)})")
num = 456
str_from_num = str(num)
print(f"整数 {num} 转字符串:'{str_from_num}' (类型:{type(str_from_num)})")
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(f"列表 {my_list} 转元组:{my_tuple} (类型:{type(my_tuple)})")
original_tuple = ('a', 'b', 'c')
new_list = list(original_tuple)
print(f"元组 {original_tuple} 转列表:{new_list} (类型:{type(new_list)})")
print("\n")
# 8. None 类型
print("=== None 类型 ===")
result = None
print(f"None 值:{result} (类型:{type(result)})")
print("\n")
# 9. 查看变量类型
print("=== 查看变量类型 ===")
variations = [age, height, name, is_student, fruits, coordinates, person, unique_numbers]
for i, var in enumerate(variations, 1):
print(f"变量 {i}: 值={var}, 类型={type(var).__name__}")
数据类型特性对比
理解不同数据类型的底层特性,对于编写高效且无 Bug 的代码至关重要。下表总结了核心差异:
| 特性 | 列表 (List) | 元组 (Tuple) | 字典 (Dict) | 集合 (Set) |
|---|---|---|---|---|
| 可变性 | 可变 | 不可变 | 可变 | 可变 |
| 有序性 | 有序 | 有序 | 有序 (3.7+) | 无序 |
| 允许重复 | 允许 | 允许 | 值允许,键不允许 | 不允许 |
| 索引方式 | 数字索引 | 数字索引 | 键索引 | 无索引 |
提示:如果你需要存储一组不会改变的数据(如配置项),优先使用元组,因为它更安全且性能略优;如果需要频繁增删改查,列表或字典更合适。
核心总结
- 变量即容器:变量名只是指向内存中数据的引用,重新赋值会指向新对象。
- 类型决定行为:不同数据类型支持的操作不同,例如列表可追加,元组不可变。
- 可变与不可变:这是 Python 内存管理的关键。不可变对象(如数字、字符串、元组)在修改时会创建新对象,而可变对象(如列表、字典)会在原地址修改。
- 类型转换:
int(),str(),list(),tuple()等函数是处理数据时的常用工具,但要注意转换失败的风险。
动手建议
- 运行上述代码,尝试修改其中的数值,观察输出变化。
- 尝试将列表转换为元组后再修改元素,看看会发生什么错误。
- 练习不同类型的混合运算,比如字符串拼接和数字加法。
- 在实际项目中,根据数据结构的特点选择最合适的类型,避免滥用。


