函数 生成器 生成器表达式

一,生成器

生成器实质就是迭代器。

如何获取生成器:

1,通过生成器函数

2,通过各种推导式来实现生成器

3,通过数据的转换也可以获取生成器

函数:

1 def order():
2     lst = []
3     for i in range(10000):
4         lst.append('衣服'+str(i))
5     return lst
6 ll = order()

生成器函数:

1 def order():
2     for i in range(10000):
3         yield '衣服'+str(i)
4 g = order()
5 wanghua = g.__next__()
6 print(wanghua)
7 zhangyining = g.__next__()
8 print(zhangyining)

区别:第一种是一次性全部拿出来,会很占用内存。第二种使用生成器。一次性只取一个,用多少取多少。生成器是一个一个的指向下一个。不会回去,__next__()到哪,指针就指到哪儿。下一次继续获取指针指向的值。

send()和__next__()都可以让生成器执行到下一个yield.

扫描二维码关注公众号,回复: 2744846 查看本文章
 1 def eat():
 2     print('我吃啥?')
 3     a = yield '包子'
 4     print('a=', a)
 5     b = yield '馅饼'
 6     print('b=', b)
 7     c = yield '牛肉汉堡'
 8     print('c=', c)
 9     yield 'GAME OVER'
10 gen = eat()
11 ret1 = gen.__next__()
12 print(ret1)
13 ret2 = gen.send('酸菜汤')
14 print(ret2)
15 ret3 = gen.send('羊肉')
16 print(ret3)
17 ret4 = gen.send('鸡肉卷')
18 print(ret4)

send()和__next__()区别:

1,send和next都是生成器向下走一次

2,send可以给上一个yield的位置传递值,不能给最后一个yield发送值。在第一次执行生成器代码的时候不能使用send()

 1 def func():
 2     yield 1
 3     yield 5
 4     yield 24
 5     yield 55
 6     yield 56
 7     yield 78
 8 func()
 9 for i in func():
10     print(i)
11 print(list(func()))

二,列表推导式,生成器表达式以及其他推导式:

猜你喜欢

转载自www.cnblogs.com/982336352ryan/p/9469867.html