Python学习笔记(7)—生成式+生成器
生成式
当我们需要快速生成一个有规律的list的时候我们可以用到列表生成的方式,例如我们想要[1, 4, 9……n×n]
[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
我们还可以在列表生成的时候用if去进行条件选择。
[x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
也可以用两层循环:
[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器
生成器可以生成一种叫做generator的结构,这种结构
g = (x for x in range(10) if x % 2 == 0)
g
<generator object <genexpr> at 0x04B90E70>
可以看出 generator 并没有实际的赋值,只是设置好了结构。
如果使用 next() 调用g则会出现具体的数值:
next(g)
0
next(g)
2
next(g)
4
next(g)
6
next(g)
8
next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
超出范围会报错
使用yield关键字也会生成generator,yield类似于return,但是yield不返回具体值,只返回结构,当具体调用的时候才会生成具体的数值。
def createGenerator():
mylist = range(3)
for i in mylist:
yield i
mygenerator = createGenerator()
print(mygenerator)
<generator object createGenerator at 0x04A61870>
for i in mygenerator
print(i)
0
1
2
3
4