18.1 列表推导式进阶
嵌套推导式
1 | # 二维列表展平 |
复杂条件
1 | # 多条件过滤 |
18.2 字典与集合推导式
字典推导式
1 | # 基本用法 |
集合推导式
1 | # 基本用法 |
18.3 生成器表达式
生成器表达式语法类似列表推导式,但使用圆括号。
1 | # 列表推导式 vs 生成器表达式 |
内存对比
1 | import sys |
18.4 yield 与生成器函数
基本生成器
1 | def count_up_to(max): |
无限生成器
1 | def infinite_counter(): |
斐波那契生成器
1 | def fibonacci(): |
18.5 生成器管道
生成器可以链式组合,形成数据处理管道。
1 | def read_data(filename): |
18.6 生成器方法
send() - 发送值
1 | def accumulator(): |
throw() - 抛出异常
1 | def generator(): |
close() - 关闭生成器
1 | def generator(): |
18.7 迭代器协议
实现 __iter__ 和 __next__ 方法。
1 | class Counter: |
18.8 本章小结
- 列表推导式:
[表达式 for 变量 in 可迭代对象 if 条件] - 字典/集合推导式语法类似
- 生成器表达式使用
(),惰性求值节省内存 yield创建生成器函数- 生成器支持
send()、throw()、close() - 迭代器协议:
__iter__和__next__
练习题
- 使用列表推导式生成 100 以内所有素数
- 使用生成器实现无限自然数序列
- 使用字典推导式统计字符串中每个字符出现次数
- 以下代码输出什么?
1
2
3gen = (x for x in range(3))
print(list(gen))
print(list(gen))