Python 进阶:元组、字典、集合与函数全解析

Python 进阶:元组、字典、集合与函数全解析(2026 版)

这四个部分是 Python 中最常用也最能体现 Python 语言特性的内容。掌握它们的高级用法,能显著提升代码的简洁性、性能和可维护性。


1. 元组(Tuple)—— 不可变序列

1.1 核心特性

  • 不可变(immutable):创建后不能修改、添加、删除元素
  • 可哈希:可作为 dict 的 key 或 set 的元素
  • 性能更好:比列表更省内存、访问更快

1.2 进阶用法

# 1. 命名元组(推荐)
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y)        # 像对象一样访问

# 2. 元组解包(Tuple Unpacking)
a, b = (1, 2)
x, y, *rest = (1, 2, 3, 4, 5)     # *rest 收集剩余元素
first, *middle, last = range(10)

# 3. 只含一个元素的元组(易错点)
t1 = (1)      # 这是一个整数!
t2 = (1,)     # 这才是元组

# 4. 作为 dict 的 key
locations = {
    (39.9, 116.3): "北京",
    (31.2, 121.5): "上海"
}

适用场景:函数返回多个值、固定配置数据、作为 dict key 等。


2. 字典(Dict)—— Python 最强大的数据结构

2.1 现代字典特性(Python 3.7+ 保证有序)

# 合并与更新(Python 3.9+)
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}

d3 = d1 | d2                    # 合并(推荐)
d1 |= d2                        # 原地更新

# 字典解包
def func(**kwargs):
    print(kwargs)

func(**d1, **d2)

2.2 进阶技巧

# 1. defaultdict
from collections import defaultdict
dd = defaultdict(list)
dd['key'].append(1)             # 不需要提前判断

# 2. dict.get() 的高级用法
value = data.get('key', '默认值')

# 3. setdefault(原子操作)
user = {}
user.setdefault('groups', []).append('admin')

# 4. 字典推导式
squares = {x: x**2 for x in range(10) if x % 3 != 0}

# 5. 视图对象(View)
for key in d.keys():      # keys() 返回动态视图
    ...

# 6. 键存在检查(推荐写法)
if key in d:              # 比 d.get() 更快

性能提示:字典查找、插入、删除平均时间复杂度为 O(1)。


3. 集合(Set)—— 去重与数学运算

3.1 核心特性

  • 无序、不重复
  • 元素必须可哈希
  • 数学集合操作支持极好
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

# 集合运算
a | b      # 并集
a & b      # 交集
a - b      # 差集
a ^ b      # 对称差集

# 子集/超集判断
a <= b     # a 是 b 的子集
a < b      # a 是 b 的真子集

3.2 进阶用法

# frozenset(不可变集合,可作为 dict 的 key)
fs = frozenset([1, 2, 3])

# 集合推导式
squared = {x**2 for x in range(10)}

# 高效去重(保留顺序)
def dedup(lst):
    seen = set()
    return [x for x in lst if not (x in seen or seen.add(x))]

最佳实践:大量数据去重、成员判断、消除重复元素时优先使用集合。


4. 函数(Function)—— Python 的灵魂

4.1 参数进阶

# 1. 可变参数
def func(*args, **kwargs):
    ...

# 2. 仅限关键字参数(Python 3+)
def connect(host, port, *, ssl=True, timeout=30):
    ...

# 3. 仅限位置参数(Python 3.8+)
def div(a, b, /):
    return a / b

# 4. 参数默认值陷阱(重要!)
def bad_func(items=[]):      # 错误!默认可变对象
    items.append(1)
    return items

# 正确写法
def good_func(items=None):
    if items is None:
        items = []

4.2 函数式编程特性

# 高阶函数
numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, numbers))
evens = list(filter(lambda x: x % 2 == 0, numbers))

# 偏函数
from functools import partial
add_five = partial(lambda x, y: x + y, 5)
print(add_five(10))   # 15

4.3 装饰器(Decorator)—— Python 进阶核心

import time
from functools import wraps

def timer(func):
    @wraps(func)                    # 保留原函数元信息
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} 执行时间: {time.time()-start:.4f}s")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

4.4 闭包(Closure)与 nonlocal

def make_counter():
    count = 0
    def counter():
        nonlocal count          # 关键!
        count += 1
        return count
    return counter

c1 = make_counter()
print(c1(), c1())   # 1 2

5. 总结对比表

特性元组 (tuple)字典 (dict)集合 (set)
可变性不可变可变可变
可哈希否(可作为值)否(frozenset 可)
顺序有序有序(3.7+)无序
重复允许键不重复不允许
最佳用途固定数据、返回值映射关系去重、集合运算

进阶学习建议

  • 熟练使用 collections 模块(defaultdictCounterdequenamedtuple
  • 掌握函数式编程风格(mapfilterreduce
  • 大量练习装饰器和闭包
  • 理解 Python 的“EAFP”(Easier to Ask for Forgiveness than Permission)哲学

需要我继续深入以下任意专题吗?

  • 装饰器进阶(带参数、类装饰器、functools 详解)
  • 生成器与迭代器协议
  • collections 模块实战
  • Python 函数式编程与并发

请告诉我你的需求,我立刻为你写下一节!

文章已创建 5321

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部