标签:mylist 迭代 生成器 yeild print generators yield mygenerator iterables
iterables
# 当你创建了一个列表,你可以一个一个的读取它的每一项,这叫做iteration:
>>> mylist = [1,2,3]
>>> for i in mylist:
print(i)
>>> 1
>>> 2
>>> 3
# mylist是可迭代的。当你用列表推导式的时候,你就创建了一个列表,而这个列表也是可迭代的
>>> mylist = [x*x for x in range(3)]
>>> for i in mylist:
print(i)
>>> 0
>>> 1
>>> 4
所有你可以用在for...in...语句中的都是可迭代的:比如lists,strings,files...因为这些
可迭代的对象你可以随意的读取所以非常方便易用,但是你必须把它们的值放到内存里,当它们
有很多值时就会消耗太多的内存。这里最后一句话是重点。
generators
生成器也是迭代器的一种,但是你只能迭代它们一次,原因很简单,因为它们不是全部存在内存里,
它们只在要调用的时候在内存里生成:
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
print(i)
>>> 0
>>> 1
>>> 4
生成器和迭代器的区别就是()代替[],还有你不能用for i in mygenerator第二次调用生成器:
yield
// yield的用法和关键字return差不多,下面的函数将会返回一个生成器
>>> def createGenerator():
mylist = range(3)
for i in mylist:
yield i*i
>>> mygenerator = createGenerator() # 创建生成器
>>> print(mygenerator) # mygenerator is an object
>>> for i in mygenerator:
print(i)
>>> 0
>>> 1
>>> 4
当你的函数要返回一个非常大的集合并且你希望只读一次的话,那么它就非常的方便了
要理解Yield你必须先理解当你调用函数的时候,函数里的代码并没有运行。函数仅仅
返回生成器对象,这就是它的最微妙之处。
然后,没当for语句迭代生成器的时候你的代码才会运转。
当for语句第一次调用函数里返回的生成器对象,函数的代码就开始运作,直到碰到yield
然后会返回本次循环的第一个返回值,所以下一次调用也将运行一次循环然后返回下一个值
直到没有值可以返回
一旦函数运行并且没有碰到yield语句就认为生成器已经为空了。因为有可能是循环结束
或者没有满足if/else之类的。
标签:mylist,迭代,生成器,yeild,print,generators,yield,mygenerator,iterables 来源: https://www.cnblogs.com/weiweivip666/p/15977682.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。