python核心 - 生成器

在讲生成器之前,先讲讲python里面常用的几个常见的推导式:

列表推导式(list comprehension)

1
my_list = [f(x) for x in sequence if cond(x)]

字典推导式(dictionary comprehension)

1
my_dict = {k(x): v(x) for x in sequence if cond(x)}

集合推导式(set comprehension)

1
my_set = {f(x) for x in sequence if cond(x)}

生成器表达式(generator expression)

1
my_generator = (f(x) for x in sequence if cond(x))

对于大部分的python初学者而言,生成器和yield关键字比较难以理解。很多文章解释的不清楚, 这篇文章我想深入的讲解这个yield关键字,它到底是个什么东西,为什么它如此的重要,以及我们该如何去使用它。

注意:近些年来,随着越来越多的特性被加入到PEP中,生成器变得越来越强大。我在下一篇文章会深入讲解协程、多任务协作和异步I/O这些高阶知识,来见识下yield的威力。

yield关键字

当我们调用一个普通的函数时,执行过程从第一条语句开始,直到碰到一个