python生成器怎么用_Python生成器的用法

生成器,一定情况下可以节省很多空间

比如:

>>> b = (x for x in range(10))

>>> b

at 0x02A17120>   这就是一个生成器,

占的内存空间要比列表小得多

需要取值的话,可以用next()函数,或者__next__()方法,比如取上面的b的值:

>>> next(b)

0

>>> b.__next__()

1

>>> next(b)

2

>>> b.__next__()

3

>>>……

Ps:当然也可以使用for遍历b的值

生成器的另外一种写法和应用:

斐波那契数列是说后面一个数始终是前面两个数的和,比如:1,1,2,3,5,8,13,21……,可以使用下面的方式来创建这样的一组数:

def createNum():

print("start----------------")

a,b = 0,1

for i in range(5):

#只要函数里面有yield这个关键字,就表示这个函数是一个生成器

yield b

a,b = b,a+b

print("stop--------")

a = createNum()

走第一次next(a),上面这个函数的执行步骤:

1、 执行print("start----------------")

2、 a = 0, b = 1

3、 第一次循环,走到yield b,打印一个b出来,当前是1,遇到yield,程序会停止往下运行

4、 走第二次next(a),程序继续执行,从刚才停止的位置yield b的下面开始,也就是执行:a,b = b,a+b,此时b=0+1=1,然后进行第二次for循环,又一次执行到yield b,打印b的值为1,又一次停止运行。

5、 再次走next(a),重复上面的步骤,打印2出来

6、 直到for循环完毕,再次走next(a),抛出异常:StopIteration

这个生成器的作用就是说你可以事先定义一个可以生成很多斐波那契数列的数值的一个函数,这个函数占用空间很小,到需要用的时候,再用next函数去生成,需要多少个就next多少次

另外,还有一种情况,可以完成两个函数交叉调用:

def test1():                  #定义一个带有yield None的生成器

while True:

print(“----111------”)

yield None

def test2():             #定义另外一个带有yield None的生成器

while True:

print(“----222------”)

yield None

a = test1()         #创建两个生成器对象

b = test2()

def test():           #定义一个函数,调用生成器对象

while True:

a.__next__()

b.__next__()

test()

结果:

----111------

----222------

----111------

----222------

----111------

----222------

----111------

----222------

……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值