🐍 前端开发 0 基础学# Python小结 Python数据类型使用场景与用途指南
本文总结了 Python 中常用的数据类型及其典型使用场景和主要用途
常量
None
定义:Python 中的空值常量,表示"无"或"不存在"
使用场景:
- 函数默认返回值
- 初始化变量(尚未赋予实际值)
- 判断对象是否存在
- 清空变量引用
主要用途示例:
python
# 函数默认返回None
def greet(name):
print(f"Hello, {name}")
# 没有return语句,默认返回None
result = greet("Alice") # result为None
# 初始化变量
user = None
if some_condition:
user = get_user()
# 判断是否存在
if user is None:
print("用户不存在")
# 清空引用
cache_data = None # 清空缓存
最佳实践:
- 使用
is None或is not None进行判断,而不是== None - 用于表示"缺失"或"未初始化"的语义
逻辑值
True、False
定义:布尔类型的两个常量值
使用场景:
- 条件判断
- 逻辑运算
- 开关标志(flag)
- 配置选项
主要用途示例:
python
# 条件判断
is_logged_in = True
if is_logged_in:
print("欢迎回来")
# 逻辑运算
has_permission = is_admin and is_active
can_edit = is_owner or is_moderator
# 开关标志
debug_mode = False
if debug_mode:
print("调试信息...")
# 配置选项
config = {
'enable_cache': True,
'auto_save': False,
'show_hints': True
}
# 函数返回布尔值
def is_valid_email(email):
return '@' in email and '.' in email
真值测试:
python
# 以下值在布尔上下文中为False
# None, False, 0, 0.0, '', [], (), {}, set()
if []: # False
print("不会执行")
if [1, 2]: # True
print("会执行")
空集
""、()、[]、{}、set()、range(0)
定义:各种数据类型的空容器
使用场景:
- 初始化容器
- 默认参数值
- 清空数据
- 边界条件处理
主要用途示例:
空字符串 ""
python
# 初始化字符串
message = ""
# 拼接内容
for item in items:
message += str(item) + "\n"
# 判断是否为空
if not message:
print("消息为空")
空元组 ()
python
# 表示无参数
def func(*args):
if args == ():
print("未传递参数")
# 不可变的空容器
empty_point = ()
空列表 []
python
# 初始化列表
results = []
# 收集数据
for i in range(10):
if i % 2 == 0:
results.append(i)
# 默认参数(注意:不要用[]作为默认参数)
def add_item(item, items=None):
if items is None:
items = [] # 正确做法
items.append(item)
return items
空字典 {}
python
# 初始化字典
user_info = {}
# 动态添加键值对
user_info['name'] = 'Alice'
user_info['age'] = 25
# 统计计数
word_count = {}
for word in text.split():
word_count[word] = word_count.get(word, 0) + 1
空集合 set()
python
# 初始化集合(注意:{}是空字典,不是空集合)
unique_items = set()
# 去重
for item in items:
unique_items.add(item)
# 集合运算
visited = set()
空范围 range(0)
python
# 不执行循环
for i in range(0):
print("不会执行")
# 动态范围
n = get_count()
for i in range(n): # n可能为0
process(i)
数字类型
int(整数)
定义:整数类型,无限精度
使用场景:
- 计数、索引
- 数学计算
- ID、编号
- 位运算
主要用途示例:
python
# 计数
count = 0
for item in items:
count += 1
# 索引
index = 5
element = my_list[index]
# ID和编号
user_id = 1001
order_number = 20231028001
# 数学计算
total = 100
price = 50
quantity = total // price # 整除
# 位运算(权限管理)
READ = 1 # 0001
WRITE = 2 # 0010
EXECUTE = 4 # 0100
permissions = READ | WRITE # 0011
if permissions & READ:
print("有读权限")
# 大整数
big_number = 123456789012345678901234567890
float(浮点数)
定义:带小数点的数字
使用场景:
- 精确小数计算
- 科学计算
- 比例、百分比
- 坐标、测量值
主要用途示例:
python
# 价格计算
price = 19.99
discount = 0.15
final_price = price * (1 - discount)
# 比例和百分比
success_rate = 0.856
percentage = success_rate * 100 # 85.6%
# 坐标
x, y = 3.14, 2.71
distance = (x**2 + y**2) ** 0.5
# 科学计数法
speed_of_light = 3e8 # 3 * 10^8
# 注意精度问题
print(0.1 + 0.2) # 0.30000000000000004
# 使用decimal模块处理精确小数
from decimal import Decimal
result = Decimal('0.1') + Decimal('0.2') # 0.3
序列类型
list(列表)
定义:可变的有序序列
使用场景:
- 存储多个元素
- 需要修改、添加、删除元素
- 保持元素顺序
- 动态数据集合
主要用途示例:
python
# 存储数据集合
students = ['Alice', 'Bob', 'Charlie']
scores = [95, 87, 92]
# 动态添加元素
tasks = []
tasks.append('写代码')
tasks.append('测试')
tasks.extend(['部署', '监控'])
# 修改元素
students[0] = 'Alicia'
# 删除元素
tasks.remove('测试')
last_task = tasks.pop()
# 排序和过滤
scores.sort()
high_scores = [s for s in scores if s > 90]
# 多维列表
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 栈和队列
stack = []
stack.append(1) # 入栈
stack.pop() # 出栈
queue = []
queue.append(1) # 入队
queue.pop(0) # 出队(效率低,建议用collections.deque)
tuple(元组)
定义:不可变的有序序列
使用场景:
- 保护数据不被修改
- 字典的键(可哈希)
- 函数返回多个值
- 表示固定结构的数据
主要用途示例:
python
# 坐标点(不应被修改)
point = (10, 20)
x, y = point
# 函数返回多个值
def get_user_info():
return ('Alice', 25, 'alice@example.com')
name, age, email = get_user_info()
# 作为字典的键
locations = {
(0, 0): '原点',
(1, 0): '东',
(0, 1): '北'
}
# 配置数据(不可变)
DATABASE_CONFIG = ('localhost', 5432, 'mydb')
# 元组解包
a, b = 1, 2 # 实际是 (1, 2)
a, b = b, a # 交换值
# 命名元组(更清晰)
from collections import namedtuple
User = namedtuple('User', ['name', 'age', 'email'])
user = User('Bob', 30, 'bob@example.com')
print(user.name) # Bob
range(范围)
定义:表示不可变的数字序列
使用场景:
- for 循环迭代
- 生成数字序列
- 节省内存(惰性求值)
主要用途示例:
python
# 基本循环
for i in range(5): # 0, 1, 2, 3, 4
print(i)
# 指定起始和结束
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
# 指定步长
for i in range(0, 10, 2): # 0, 2, 4, 6, 8
print(i)
# 倒序
for i in range(10, 0, -1): # 10, 9, 8, ..., 1
print(i)
# 生成索引
items = ['a', 'b', 'c']
for i in range(len(items)):
print(f"索引{i}: {items[i]}")
# 更好的方式:enumerate
for i, item in enumerate(items):
print(f"索引{i}: {item}")
# 转换为列表(不推荐大范围)
numbers = list(range(1, 11)) # [1, 2, 3, ..., 10]
文本序列
str(字符串)
定义:不可变的字符序列
使用场景:
- 文本处理
- 用户输入/输出
- 文件读写
- 模板和格式化
- API 通信
主要用途示例:
python
# 基本文本
message = "Hello, World!"
name = 'Alice'
# 多行字符串
description = """
这是一段
多行文本
描述
"""
# 字符串格式化
# 方式1:f-string(推荐)
greeting = f"你好,{name}!"
info = f"{name}今年{age}岁"
# 方式2:format方法
template = "姓名:{},年龄:{}"
result = template.format(name, age)
# 方式3:%格式化(旧式)
old_style = "姓名:%s,年龄:%d" % (name, age)
# 字符串操作
text = "Python Programming"
upper_text = text.upper() # 转大写
lower_text = text.lower() # 转小写
words = text.split() # 分割
joined = "-".join(words) # 连接
replaced = text.replace("Python", "Java")
# 字符串检查
if "Python" in text:
print("包含Python")
if text.startswith("Py"):
print("以Py开头")
if text.endswith("ing"):
print("以ing结尾")
# 去除空白
dirty_text = " hello "
clean_text = dirty_text.strip() # "hello"
# 字符串切片
s = "Python"
print(s[0]) # P
print(s[-1]) # n
print(s[0:2]) # Py
print(s[::-1]) # nohtyP(反转)
# 路径处理
from pathlib import Path
path = Path("/home/user/file.txt")
filename = path.name # file.txt
# JSON字符串
import json
data = {'name': 'Alice', 'age': 25}
json_str = json.dumps(data)
parsed_data = json.loads(json_str)
# 正则表达式
import re
pattern = r'\d{3}-\d{4}' # 电话号码
if re.match(pattern, '123-4567'):
print("匹配成功")
集合类型
set(集合)
定义:无序、不重复的可变集合
使用场景:
- 去重
- 成员测试(快速查找)
- 集合运算(并集、交集、差集)
- 消除重复元素
主要用途示例:
python
# 去重
numbers = [1, 2, 2, 3, 3, 3, 4]
unique_numbers = set(numbers) # {1, 2, 3, 4}
unique_list = list(unique_numbers)
# 快速成员测试
valid_users = {'alice', 'bob', 'charlie'}
if 'alice' in valid_users: # O(1)时间复杂度
print("有效用户")
# 集合运算
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}
union = set_a | set_b # 并集:{1, 2, 3, 4, 5, 6}
intersection = set_a & set_b # 交集:{3, 4}
difference = set_a - set_b # 差集:{1, 2}
symmetric_diff = set_a ^ set_b # 对称差:{1, 2, 5, 6}
# 添加和删除元素
fruits = {'apple', 'banana'}
fruits.add('orange')
fruits.remove('banana') # 不存在会报错
fruits.discard('grape') # 不存在不报错
# 检查子集和超集
set_c = {1, 2}
print(set_c.issubset(set_a)) # True
print(set_a.issuperset(set_c)) # True
# 去除列表中的重复元素并保持顺序
def remove_duplicates(items):
seen = set()
result = []
for item in items:
if item not in seen:
seen.add(item)
result.append(item)
return result
# 统计唯一访客
visitors = set()
visitors.add('user1')
visitors.add('user2')
visitors.add('user1') # 重复,不会添加
print(f"唯一访客数:{len(visitors)}")
映射类型
dict(字典)
定义:键值对的可变映射
使用场景:
- 配置数据
- 缓存
- 计数统计
- 快速查找(O(1))
- JSON 数据处理
- 对象属性存储
主要用途示例:
python
# 基本使用
user = {
'name': 'Alice',
'age': 25,
'email': 'alice@example.com'
}
# 访问值
print(user['name']) # Alice
print(user.get('phone', '无')) # 无(默认值)
# 修改和添加
user['age'] = 26
user['phone'] = '123-4567'
# 删除
del user['email']
phone = user.pop('phone', None)
# 遍历
for key in user:
print(f"{key}: {user[key]}")
for key, value in user.items():
print(f"{key}: {value}")
# 配置管理
config = {
'database': {
'host': 'localhost',
'port': 5432,
'name': 'mydb'
},
'cache': {
'enabled': True,
'timeout': 300
}
}
db_host = config['database']['host']
# 计数统计
text = "hello world hello"
word_count = {}
for word in text.split():
word_count[word] = word_count.get(word, 0) + 1
# {'hello': 2, 'world': 1}
# 使用Counter(更简单)
from collections import Counter
word_count = Counter(text.split())
# 分组
from collections import defaultdict
students_by_grade = defaultdict(list)
students_by_grade['A'].append('Alice')
students_by_grade['B'].append('Bob')
students_by_grade['A'].append('Amy')
# 缓存
cache = {}
def fibonacci(n):
if n in cache:
return cache[n]
if n <= 1:
return n
result = fibonacci(n-1) + fibonacci(n-2)
cache[n] = result
return result
# 字典推导式
squares = {x: x**2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 合并字典(Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4}
# JSON数据
import json
data = {'users': [{'name': 'Alice', 'age': 25}]}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
# 有序字典(Python 3.7+默认有序)
from collections import OrderedDict
ordered = OrderedDict([('first', 1), ('second', 2)])
数据类型选择指南
快速决策树
python
需要存储数据?
├─ 单个值
│ ├─ 数字 → int/float
│ ├─ 文本 → str
│ ├─ 真假 → bool
│ └─ 空值 → None
│
└─ 多个值
├─ 需要键值对映射? → dict
├─ 需要去重? → set
├─ 需要修改?
│ ├─ 是 → list
│ └─ 否 → tuple
└─ 只是数字范围? → range
性能考虑
| 操作 | list | tuple | set | dict |
|---|---|---|---|---|
| 索引访问 | O(1) | O(1) | N/A | O(1) |
| 成员测试 | O(n) | O(n) | O(1) | O(1) |
| 添加元素 | O(1) | N/A | O(1) | O(1) |
| 删除元素 | O(n) | N/A | O(1) | O(1) |
| 内存占用 | 中 | 小 | 中 | 大 |
可变性对比
- 可变:list, set, dict
- 不可变:int, float, str, tuple, range, bool, None
常见组合使用
python
# 列表嵌套字典
users = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 30}
]
# 字典嵌套列表
menu = {
'热菜': ['宫保鸡丁', '鱼香肉丝'],
'凉菜': ['拍黄瓜', '凉拌木耳']
}
# 集合列表去重
unique_items = list(set(items))
# 字典统计
from collections import Counter
stats = Counter(items) # 返回字典
最佳实践总结
-
选择合适的数据类型
- 根据数据特性选择(是否需要修改、是否需要顺序、是否需要键值对)
- 考虑性能要求(查找、插入、删除频率)
-
避免常见陷阱
- 不要用可变对象作为函数默认参数
- 字典和集合的键必须是不可变类型
- 浮点数精度问题
-
利用内置函数和标准库
len(),sum(),max(),min(),sorted()collections模块:Counter, defaultdict, OrderedDictitertools模块:高效迭代工具
-
代码可读性
- 使用有意义的变量名
- 利用类型提示(Type Hints)
- 善用推导式,但不要过度嵌套
python
# 类型提示示例
def process_data(items: list[int]) -> dict[str, int]:
result: dict[str, int] = {}
for item in items:
result[str(item)] = item * 2
return result
总结
Python 的数据类型丰富且强大,选择合适的数据类型不仅能让代码更简洁、更易读,还能提升程序性能。记住:
- None 表示空值
- bool 用于逻辑判断
- int/float 处理数字
- str 处理文本
- list 可变有序集合
- tuple 不可变有序集合
- set 无序去重集合
- dict 键值对映射
熟练掌握这些数据类型的特性和使用场景,是编写高质量 Python 代码的基础!