Python yield关键简单解析
-
1,带有yield关键字的函数,被python解析器,视为一个生成器。
-
2,类似于return关键字,但是return关键字会结束函数的调用,并且在下一次调用函数的时候,该函数会从开头开始。而yield关键字,也会结束该函数,但是该函数为冻结状态,当下次这个函数被唤醒时,会从上次调用的地方,继续向下执行。而不像return一样,从头开始。
-
3,很像c++中的static关键字。
-
3,示例,生成3以内整数的平方。并打印。
-
普通代码生成方法
def gen(n): l = [] # 定义一个列表,将生成的数保存到列表里面,然后生成 for i in range(n): l.append(i*i) print("hello") return l for i in gen(3): print(i)
- 输出结果
hello hello hello 0 1 4
- 我们可以看到,是先生成列表,最后打印出来
-
使用生成器
def gen(n): for i in range(n): yield i*i # 使用yield关键字,使gen成为生成器 print("hello") for i in gen(3): print(i)
- 输出结果
0 hello 1 hello 4 hello
- 我们可以清楚的看到,当生产一个数的平方后,gen()函数会保存上一次执行的断点。当再次调用时,会从断点处,继续向下执行
-
-
yield生成器的好处,当使用列表进行保存大量数据时,会占用大量内存,而生成器,是即时性返回数据的,不会出现,在内存中保存大量数据的情况,节约内存资源。