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

Posted 繁华若梦、惜流年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)。下一次执行顺序一样。



 

以上是关于python中普通function和yield函数的区别的主要内容,如果未能解决你的问题,请参考以下文章

理解Python协程:从yield/send到yield from再到async/await

python中yield是啥意思

Generator 函数

ES6中generator(生成器)函数的应用

python生成器之yield

yield用法