生成器

#一边循环,一边计算的机制,称为生成器generator。generator保存的是算法,可推算出列表中的某个元素值,可节省大量的存储空间
#生成器:只有在调用的时候才会生成相应的数据。只记录当前位置。
#只有一个__next__()方法
#要把函数变成生成器,只需把print命令改为:yield命令即可
#如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
#函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用__next__()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
#生成器不能像普通的列表一样,通过下标或者切片的方式去取。生成器只能通过循环或者__next__()方法去取。

#创建生成器方法一:

generator1 = (i*2 for i in range(100)) #与列表很相似,只是把[]改成为()。如果在Pyton命令行执行,将返回内存地址
for i in generator1:
print(i)

###或者将for循环改用以下命令一个个的输出:
print(generator1.__next__()) #读取第一个元素值
print(generator1.__next__()) #读取第二个元素值
print(generator1.__next__()) #只能往后读取,不能往前
print(generator1.__next__()) #读取到最后一个值时,抛出StopIteration的错误。


###################################
#创建生成器方法二:
def odd():
print("step 1")
yield 1 #执行过程中,遇到yield执行后就中断。后面的数值为可选的返回值
print("step 2")
yield 3
print("step 3")
yield 5

o = odd()
o.__next__()
o.__next__()
o.__next__()

转载于:https://www.cnblogs.com/hy007x/p/7727434.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值