Python 生成器
于 2020 年 1 月 7 日更新
生成器是用于创建迭代器的函数,因此可以在for
循环中使用它。
创建生成器
生成器的定义类似于函数,但只有一个区别,我们使用yield
关键字返回用于for
循环的每次迭代的值。 让我们看一个示例,其中我们试图克隆 python 的内置range()
函数。
def my_range(start, stop, step = 1):
if stop <= start:
raise RuntimeError("start must be smaller than stop")
i = start
while i < stop:
yield i
i += step
try:
for k in my_range(10, 50, 3):
print(k)
except RuntimeError as ex:
print(ex)
except:
print("Unknown error occurred")
预期输出:
10
13
16
19
22
25
28
31
34
37
40
43
46
49
def my_range(start, stop, step = 1):
if stop <= start:
raise RuntimeError("start must be smaller than stop")
i = start
while i < stop:
yield i
i += step
try:
for k in my_range(10, 50, 3):
print(k)
except RuntimeError as ex:
print(ex)
except:
print("Unknown error occurred")
my_range()
的工作方式如下:
在for
循环中,调用my_range()
函数,它将初始化三个参数(start
,stop
和step
)的值,并检查stop
是否小于或等于start
。 i
被分配了start
的值。 此时,i
为10
,因此while
条件的值为True
,而while
循环开始执行。 在下一个语句yield
中,将控制转移到for
循环,并将i
的当前值分配给变量k
,在for
循环打印语句中执行该语句,然后该控件再次传递到函数my_range()
内的第 7 行 i
递增。 此过程一直重复进行,直到i < stop
为止。