python中普通function和yield函数的区别

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator函数,

generator和函数的执行流程不一样。

函数是顺序执行,遇到return语句或者最后一行函数语句就返回。

而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回该值,并停止执行,

当再次执行next函数的时候,从上次返回的yield语句处继续执行。

 

def generator_func(value=0):
while value < 10:
value = yield value
value += 1
generator = generator_func()
print('step 1')
print(next(generator))
print('step 2')
print(generator.send(1))
print('step 3')
print(generator.send(7))
print('step 4')
#print(generator.send(10))
x = (i for i in range(2))
print(type(x))# <class 'generator'>
print(next(x))

执行过程:
  当第一次执行next的时候,进入生成函数内部,执行到yield value,返回value,并停止执行。这个时候value为默认值0,因此print是0.
当第二次执行send(1)的时候,进入生成函数内部,执行
yield value的下一步value=,并把send传递过来的值1赋给value,然后执行value+=1,
继续循环,当又遇到yield,这个时候value为2返回,并停止执行。因此print(2)。下一次执行顺序一样。



 

posted @ 2020-06-18 15:31  一日学一日功  阅读(311)  评论(0编辑  收藏  举报