iterables/generators/yeild
2022/3/7 23:18:36
本文主要是介绍iterables/generators/yeild,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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之类的。
这篇关于iterables/generators/yeild的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22[开源]10.3K+ Star!轻量强大的开源运维平台,超赞!
- 2024-11-21Flutter基础教程:新手入门指南
- 2024-11-21Flutter跨平台教程:新手入门详解
- 2024-11-21Flutter跨平台教程:新手入门与实践指南
- 2024-11-21Flutter列表组件教程:初学者指南
- 2024-11-21Flutter列表组件教程:新手入门指南
- 2024-11-21Flutter入门教程:初学者必看指南
- 2024-11-21Flutter入门教程:从零开始的Flutter开发指南
- 2024-11-21Flutter升级教程:新手必读的升级指南
- 2024-11-21Flutter升级教程:轻松掌握Flutter版本更新