Python_59之生成器模块

迭代器,生成器

通过函数实现生成器,有生成东西的能力

比如一个随机数生成函数  就可以随机生成数字  是一个生成器

普通函数体里的关键字只要有  yield 就可以了。yeild与return不同,虽然都可以终止函数体,但是yeild可以保存上次的执行点  。就叫生成器函数如  scq

def scq():
yield 1
yield 2
yield 3
yield 4
yield 5

执行这个函数之后就得到了生成器  如sc

sc=scq()

生成器函数内部是不执行的:

def scq():
yield 1
print (1)
yield 2
print (2)
yield 3
print (3)
yield 4
print (4)
yield 5
print (5)

sc=scq()
print (sc)
输出——————————————————————————————————————————————————————————————————————————————————
<generator object scq at 0x0000000002275BA0>
***********************************************************************************************************************************************************************************
def scq():
print (1)
yield 1
print (2)
yield 2
print (3)
yield 3
print (4)
yield 4
print (5)
yield 5


sc=scq()#此处仅仅是获取到了一个生成器
sc.__next__()#此处是调用了_next_的生成器方法
输出————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
1
***********************************************************************************************************************************************************************************
def scq():
print (11)
yield 1
print (22)
yield 2
print (33)
yield 3
print (44)
yield 4
print (55)
yield 5


sc=scq()#此处仅仅是获取到了一个生成器
rr=sc.__next__()#此处是调用了_next_的生成器方法
print (rr)
输出—————————在通过next调用的时候遇到函数体中的yeild就会停止执行——————sc._next_()执行的结果就是print(11)————————rr的结果就是等于yeild对应的值 1—————————————————————————————————————————————————————————————————————————————————————————————————
11
1
***********************************************************************************************************************************************************************************
def scq():
print (11)
yield 1
print (22)
yield 2
print (33)
yield 3
print (44)
yield 4
print (55)
yield 5


sc=scq()#此处仅仅是获取到了一个生成器
sc.__next__()#此处是调用了_next_的生成器方法
sc.__next__()#此处是调用了_next_的生成器方法
sc.__next__()#此处是调用了_next_的生成器方法
sc.__next__()#此处是调用了_next_的生成器方法
输出生成—————————————————————————————————————如此循环的一个一个往下执行—有五个yield,当执行完5次之后,再调用next方法时就会报错——————————————————————————————————————————————————————————————————————————

   11
   22
   33
   44

**********************************************************************************************************************************************************************************
模拟xrange的实现

def scq(i):
start=0
while (i>=0):
print (start)
if start >i:
return
yield start
start+=1

def listsc(i):
j=0
ls=[]
while(i>=j):
ls.append(j)
j+=1
return ls


def mnrange(i):
rr=scq(i)
for j in listsc(i):
rr.__next__()
j+=1

print (listsc(10))
mnrange(10)
输出结果————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0
1
2
3
4
5
6
7
8
9
10

**********************************************************************************************************************************************************************************************************************


 

posted on 2018-05-09 14:21  JuGooLar  阅读(134)  评论(0编辑  收藏  举报

导航