隐藏页面特效

iterables/generators/yield

1|0iterables


# 当你创建了一个列表,你可以一个一个的读取它的每一项,这叫做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...因为这些 可迭代的对象你可以随意的读取所以非常方便易用,但是你必须把它们的值放到内存里,当它们 有很多值时就会消耗太多的内存。这里最后一句话是重点。

2|0generators


生成器也是迭代器的一种,但是你只能迭代它们一次,原因很简单,因为它们不是全部存在内存里, 它们只在要调用的时候在内存里生成: >>> mygenerator = (x*x for x in range(3)) >>> for i in mygenerator: print(i) >>> 0 >>> 1 >>> 4 生成器和迭代器的区别就是()代替[],还有你不能用for i in mygenerator第二次调用生成器:

3|0yield


// 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之类的。

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/15977682.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示