Python学习笔记(7)---列表生成式+生成器

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值