一般的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什么意思的细致内容,更多请关注ki4网别的相干文章!