python yield什么意思-Python教程

资源魔 38 0
浏览他人的python源码时碰着了这个yield这个要害字,各类搜寻终于搞懂了,正在此做一下总结:

通常的for…in…轮回中,in前面是一个数组,这个数组就是一个可迭代工具,相似的另有链表,字符串,文件。它能够是mylist= [1, 2, 3],也能够是mylist = [x*x for x in range(3)]。 它的缺点是一切数据都正在内存中,假如有海量数据的话将会十分耗内存。(保举学习:Python视频教程)

天生器是能够迭代的,但只能够读取它一次。由于用的时分才天生。比方 mygenerator = (x*x for x in range(3)),留意这里用到了(),它就没有是数组,而下面的例子是[]。

我了解的天生器(generator)可以迭代的要害是它有一个next()办法,工作原理就是经过反复挪用next()办法,直到捕捉一个异样。能够用下面的mygenerator测试。

带有yield的函数再也不是一个一般函数,而是一个天生器generator,可用于迭代,工作原理同上。

yield一个相似return的要害字,迭代一次遇到yield时就前往yield前面的值。重点是:下一次迭代时,从上一次迭代遇到的yield前面的代码开端执行。

扼要了解:yield就是return前往一个值,而且记住这个前往的地位,下次迭代就从这个地位后开端。

带有yield的函数不只仅只用于for轮回中,并且可用于某个函数的参数,只需这个函数的参数容许迭代参数。比方array.extend函数,它的原型是array.extend(iterable)。

send(msg)与next()的区分正在于send能够通报参数给yield表白式,这时候通报的参数会作为yield表白式的值,而yield的参数是前往给挪用者的值。——换句话说,就是send能够强行修正上一个yield表白式值。比方函数中有一个yield赋值,a

= yield 5,第一次迭代到这里会前往5,a尚未赋值。第二次迭代时,应用.send(10),那末,就是强行修正a表白式的值为10,原本是None的,那末a=10

send(msg)与next()都有前往值,它们的前往值是以后迭代遇到yield时,yield前面表白式的值,其实就是以后迭代中yield前面的参数。

第一次挪用时必需先next()或send(None),不然会报错,send后之以是为None是由于这时候候不上一个yield(依据第8条)。能够以为,next()同等于send(None)。

更多Python相干技巧文章,请拜访Python教程栏目进行学习!

以上就是python yield甚么意义的具体内容,更多请存眷资源魔其它相干文章!

标签: Python python教程 python编程 python使用问题

抱歉,评论功能暂时关闭!