生成器定义
从语法讲:生成器就是带有yield语句的函数。一个函数或i程序只返回一次,但是一个生成器能暂停执行并返回一个中间的结果:
那就是yield语句的功能(返回一个值给调用者,并暂停执行)
当生成器的next()方法被调用的时候,会准确的从离开的地方继续。
第一个生成器:
gn = (data for data in range(60) if data % 3)
yield 生成器的运行机制:
当向生成器要一个数时,生成器会执行,直至出现 yield 语句,生成器把
yield 的参数给你,之后生成器就不会往下继续运行。 当你问他要下一个数时,他会从上次的状态。开始运行,直至出现yield语句,把参数给你,之后停下。如此反复直至退出函数
使用生成器
第一个简单的生成器
#FileName:generator.py
#生成中的成员经过yield语句之后会被pop
#第一个生成器
print('第一个生成器:--------------------')
def generatorFunc():
yield 'Hello World!'
yield 'That is all!'
gen = generatorFunc()
#打印变量gen 的类型
print('gen type :',type(gen))
#打印生成器中的成员个数(转成list打印),
print(len(list(gen))) #2
#打印生成器中的成员
for elemp in gen:
print(elemp)
#再次打印生成器中的成员个数
print(len(list(gen))) #0
第二个生成器
#第二个生成器
print('第二个生成器:--------------------')
#输入随机值模块
from random import randint
#准备列表
print('准备列表:lsgen------------------')
lsgen = ['Hello','New','Python','World','jiezhj']
print('lsgen的结构:',lsgen)
#定义生成器(函数)
def genls(ls):
#判断列表的长度
while len(ls) > 0:
#通过yield语句返回从列表中弹出的数据,randint方法获取随机索引值
yield ls.pop(randint(0,len(ls)-1))#生成的随机数为0<= '随机数' <= len(ls)-1
#使用生成器处理列表
for data in genls(lsgen):
print('使用生成器随机弹出的值为:',data)