Python 生成器:功能、应用与特性解析
1. 生成器嵌套与简洁性
生成器嵌套可以任意混合和深入,但有些嵌套可能比其他的更有效。例如:
>>> list(map(abs, map(abs, map(abs, (−1, 0, 1)))))
[1, 0, 1]
>>> list(abs(x) for x in (abs(x) for x in (abs(x) for x in (−1, 0, 1))))
[1, 0, 1]
这些示例展示了生成器的通用性,但代码故意写得复杂,以强调生成器表达式和之前讨论的列表推导式一样,有被滥用的可能。通常,除非必要,应保持代码简单。
非嵌套的方法通常能提供更简单的解决方案,同时利用生成器的优势,遵循“扁平优于嵌套”的 Python 格言:
>>> list(abs(x) * 2 for x in (−1, −2, 3, 4))
[2, 4, 6, 8]
>>> list(math.sqrt(x ** 2) for x in range(4))
[0.0, 1.0, 2.0, 3.0]
>>> list(abs(x) for x in (−1, 0, 1))
[1, 0, 1]
2. 生成器表达式与 filter 函数对比
生成器表达式支持所有常见的列表推导式语法,包括 if 子句,其作用类似
超级会员免费看
订阅专栏 解锁全文
3531

被折叠的 条评论
为什么被折叠?



