Python生成器
2021-07-20 19:07
标签:[] pre pytho 存储空间 算法 obj 结果 生成 列表生成式 执行结果: 生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。 要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的 执行结果 生成器一共两种创建方式: 1.s = (x*2 for x in range(5)) 2. yield 执行结果: 什么是可迭代对象(对象拥有iter方法的) send 可以断点执行(debug),了解具体的执行过程,第10行返回1(yield 1,s为1),第13行(count = ‘eeee‘),并且print(count),yield 2返回2,ret为2。 执行结果: Python生成器 标签:[] pre pytho 存储空间 算法 obj 结果 生成 列表生成式 原文地址:https://www.cnblogs.com/112358nizhipeng/p/9497151.html 1 def f(n):
2 return n**3
3
4 #列表生成式
5 a = [f(x) for x in range(10)]
6
7 print (a)
8 print(type(a))
9
10
11
12
13
14
15 t = (‘123‘, 8)#元组
16 a, b = t # a=t[0], b=t[1] ,数量必须一致
17 print(a)
18 print(b)
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
class ‘list‘>
123
8
Process finished with exit code 0
[]
改成()
,就创建了一个generator:1 s = (x*2 for x in range(5)) #生成器
2
3 print(s) #
1 def foo():
2 print(‘ok1‘) # foo()时不会被执行
3 yield 1
4
5 print("ok2")
6 yield 2
7
8
9 g=foo() #生成生成器对象
10 print(g) # foo()成为了生成器对象
l = [1, 2, 3]
l.__iter__()
1 def bar():
2 print(‘ok‘)
3 count = yield 1 #yield先返回
4 print(count)
5
6 yield 2
7
8 b = bar()
9
10 s = b.send(None) #相当于next(b) 第一次send前如果没有next,只能传一个send(None),并不知道将值传给谁,只能用None
11 print(s) #yield返回值
12
13 ret = b.send(‘eeee‘) #传给count
14 print(ret)
ok
1
eeee
2
Process finished with exit code 0
上一篇:python之list-列表
下一篇:python