python----yield(generator)生成器
在python编程中
很多时候都需要用到函数
函数可以产生值并通过return返回
但是后时候函数里面产出的值不只有一个
例如:
情景一:
def show_num(): for n in "12345": print(n)
a = show_num()
print(a)
1
2
3
4
5
None
可以看到,上面的函数会把for循环里得出的所有的结果打印出来,但是函数本身不会返回任何值,这样的话函数的重用率就会变得非常低。
情景二:
def show_num(): list = [] for n in "12345": list.append(n) return list
a = show_num()
print(a)
['1', '2', '3', '4', '5']
如果想返回for循环里面的所有数值,需要把for循环里面得出的数值写进一个列表里面,然后函数最后返回这个列表。
但是随着数据的增多,列表的长度也会随着增加,这个内存的使用就会越来越大。因此一般不建议这样操作。
情景三:
def show_num(): for n in "12345": yield n
a = show_num()
print(a)
<generator object show_num at 0x7f7da13a2a98>
使用了yield之后,这个函数就会变成一个(generator)生成器,他的意思是,for循环的每一次迭代中都会暂停一下,并输出当前的迭代值。
当第一次迭代时候,n=1,这个时候yield会暂停整个for循环,并返回当前n的值,也就是1.
因此,我们可以这样运用(generator)生成器。
def show_num(): for n in "12345": yield n for n in show_num(): print(n)
1
2
3
4
5