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函数的区别的主要内容,如果未能解决你的问题,请参考以下文章