本文主要介绍python中的生成器函数s: list _ 2中的list _ 2 = [] for x append (x * * 2) print (list _ 2)列表生成器:我们可以通过列表生成器直接创建一个列表 但是 由于内存限制 列表容量肯定是有限的 而且 创建一个包含100万个元素的列表 不仅占用大量的存储空间 如果我们只需要访问前几个元素 后面大部分元素占用的空间都会被浪费掉 那么 如果列表元素可以按照某种算法计算出来 我们是否可以在循环的过程中连续计算后续元素呢?这样 就不需要创建一个完整的列表 从而节省了大量空间 在python中 这种边循环边计算的机制被称为生成器 有许多方法可以创建一个生成器 第一种方法非常简单 只要你把一个列表生成器的[]改为 你就创建了一个生成器:代码演示:list_1 = (x*2 for x in range(10))比较生成器和列表生成的代码演示导入时间start _ time = time timelist _ 1 =(x * 2 for x in range(10))stop _ time = time 时间 打印(list_1)打印( list_1的运行时间是% s %(stop _ time-start _ time))start _ time = time . timelist _ 2 =[x * 2 for x in range(10)]stop _ time = time timeprint(list _ 2)print( list _ 2运行时为% s %(停止时间-开始时间)) 运行结果:生成器对象gen expr在0x0000011 facd1 : print(x)中x的生成器list _ 1 =(x * 2 for x in rang: a b c = 0 1 0而c sum: print(b)a b = b abc = 1 fib (6)仔细观察 我们可以看到fib函数实际上定义了斐波那契数列的计算规则 可以从第一个元素开始计算任何后续的元素 这个逻辑其实和生成器很像 换句话说 上面的函数和生成器只有一步之遥 要将fib函数转换为生成器 只需将print(b)更改为yi: a b c = 0 1 0 while c sum: # print(b)yield b #这里的代码执行会跳出这个函数 使用next将b的值返回给代码 其中a b = b a b c = 1# print(fib(6)) #这里得到的是生成器p = fib (6) (下一步(p))打印(下一步(p))打印( 做点别的事情 )print(next(p))print(p(p))print(p . _ _ next _ _)第二种生成器生成方法是定义 如果一个函数定义包含yield关键字 那么这个函数就不再是一个普通的函数 而是一个生成器:f = fib(6)f generator object fib at 0x 104 f: a b c = 0 1 0而c sum:收益b a b = b a b c = 1返回 返回值只能传递给异常 g =纤维(3) 而tru: try: x =下一个(g)打印( ge: ; x)除了停止迭代作为:打印( 生成器返回值: ;: 1g: 1g echo 0-@ . c om2生成器返回valu:返回值只能传递给异常 获取返回值的也可以通过yield达到单线程情况下并发操作的效果:next和_ __next__:作用相同 只是用法不同 它们既可以唤醒yield 也可以接收yield传递的值 send:还可以唤醒yield 接收yield传递的值 而且还可以唤醒yield 传递一个值# _ * _ coding: utf-8 _ * _ #来实现生成器并发操作 进口timedef consum:打印%s准备吃包子了! % nam:包子= yield print( 包子[%s]来了 被[%s]吃了! %(包子 姓名))def produc: c =消费者(姓名)c2 =消费者( b )c. _ _下一个_ c2 _ _ n:时间 睡眠(1)打印( 做了2个馒头! c .发送(i) c2 .发送(i)制作人( 飞某人 )标签:发电机功能,下面一起看看python中的生成器函数s: list _ 2中的list _ 2 = [] for x append (x * * 2) print (list _ 2)列表生成器:我们可以通过列表生成器直接创建一个列表 但是 由于内存限制 列表容量肯定是有限的 而且 创建一个包含100万个元素的列表 不仅占用大量的存储空间 如果我们只需要访问前几个元素 后面大部分元素占用的空间都会被浪费掉 那么 如果列表元素可以按照某种算法计算出来 我们是否可以在循环的过程中连续计算后续元素呢?这样 就不需要创建一个完整的列表 从而节省了大量空间 在python中 这种边循环边计算的机制被称为生成器 有许多方法可以创建一个生成器 第一种方法非常简单 只要你把一个列表生成器的[]改为 你就创建了一个生成器:代码演示:list_1 = (x*2 for x in range(10))比较生成器和列表生成的代码演示导入时间start _ time = time timelist _ 1 =(x * 2 for x in range(10))stop _ time = time 时间 打印(list_1)打印( list_1的运行时间是% s %(stop _ time-start _ time))start _ time = time . timelist _ 2 =[x * 2 for x in range(10)]stop _ time = time timeprint(list _ 2)print( list _ 2运行时为% s %(停止时间-开始时间)) 运行结果:生成器对象gen expr在0x0000011 facd1 : print(x)中x的生成器list _ 1 =(x * 2 for x in rang: a b c = 0 1 0而c sum: print(b)a b = b abc = 1 fib (6)仔细观察 我们可以看到fib函数实际上定义了斐波那契数列的计算规则 可以从第一个元素开始计算任何后续的元素 这个逻辑其实和生成器很像 换句话说 上面的函数和生成器只有一步之遥 要将fib函数转换为生成器 只需将print(b)更改为yi: a b c = 0 1 0 while c sum: # print(b)yield b #这里的代码执行会跳出这个函数 使用next将b的值返回给代码 其中a b = b a b c = 1# print(fib(6)) #这里得到的是生成器p = fib (6) (下一步(p))打印(下一步(p))打印( 做点别的事情 )print(next(p))print(p(p))print(p . _ _ next _ _)第二种生成器生成方法是定义 如果一个函数定义包含yield关键字 那么这个函数就不再是一个普通的函数 而是一个生成器:f = fib(6)f generator object fib at 0x 104 f: a b c = 0 1 0而c sum:收益b a b = b a b c = 1返回 返回值只能传递给异常 g =纤维(3) 而tru: try: x =下一个(g)打印( ge: ; x)除了停止迭代作为:打印( 生成器返回值: ;: 1g: 1g echo 0-@ . c om2生成器返回valu:返回值只能传递给异常 获取返回值的也可以通过yield达到单线程情况下并发操作的效果:next和_ __next__:作用相同 只是用法不同 它们既可以唤醒yield 也可以接收yield传递的值 send:还可以唤醒yield 接收yield传递的值 而且还可以唤醒yield 传递一个值# _ * _ coding: utf-8 _ * _ #来实现生成器并发操作 进口timedef consum:打印%s准备吃包子了! % nam:包子= yield print( 包子[%s]来了 被[%s]吃了! %(包子 姓名))def produc: c =消费者(姓名)c2 =消费者( b )c. _ _下一个_ c2 _ _ n:时间 睡眠(1)打印( 做了2个馒头! c .发送(i) c2 .发送(i)制作人( 飞某人 )标签:发电机功能相关资讯。
了解更多python中的生成器函数s: list _ 2中的list _ 2 = [] for x append (x * * 2) print (list _ 2)列表生成器:我们可以通过列表生成器直接创建一个列表 但是 由于内存限制 列表容量肯定是有限的 而且 创建一个包含100万个元素的列表 不仅占用大量的存储空间 如果我们只需要访问前几个元素 后面大部分元素占用的空间都会被浪费掉 那么 如果列表元素可以按照某种算法计算出来 我们是否可以在循环的过程中连续计算后续元素呢?这样 就不需要创建一个完整的列表 从而节省了大量空间 在python中 这种边循环边计算的机制被称为生成器 有许多方法可以创建一个生成器 第一种方法非常简单 只要你把一个列表生成器的[]改为 你就创建了一个生成器:代码演示:list_1 = (x*2 for x in range(10))比较生成器和列表生成的代码演示导入时间start _ time = time timelist _ 1 =(x * 2 for x in range(10))stop _ time = time 时间 打印(list_1)打印( list_1的运行时间是% s %(stop _ time-start _ time))start _ time = time . timelist _ 2 =[x * 2 for x in range(10)]stop _ time = time timeprint(list _ 2)print( list _ 2运行时为% s %(停止时间-开始时间)) 运行结果:生成器对象gen expr在0x0000011 facd1 : print(x)中x的生成器list _ 1 =(x * 2 for x in rang: a b c = 0 1 0而c sum: print(b)a b = b abc = 1 fib (6)仔细观察 我们可以看到fib函数实际上定义了斐波那契数列的计算规则 可以从第一个元素开始计算任何后续的元素 这个逻辑其实和生成器很像 换句话说 上面的函数和生成器只有一步之遥 要将fib函数转换为生成器 只需将print(b)更改为yi: a b c = 0 1 0 while c sum: # print(b)yield b #这里的代码执行会跳出这个函数 使用next将b的值返回给代码 其中a b = b a b c = 1# print(fib(6)) #这里得到的是生成器p = fib (6) (下一步(p))打印(下一步(p))打印( 做点别的事情 )print(next(p))print(p(p))print(p . _ _ next _ _)第二种生成器生成方法是定义 如果一个函数定义包含yield关键字 那么这个函数就不再是一个普通的函数 而是一个生成器:f = fib(6)f generator object fib at 0x 104 f: a b c = 0 1 0而c sum:收益b a b = b a b c = 1返回 返回值只能传递给异常 g =纤维(3) 而tru: try: x =下一个(g)打印( ge: ; x)除了停止迭代作为:打印( 生成器返回值: ;: 1g: 1g echo 0-@ . c om2生成器返回valu:返回值只能传递给异常 获取返回值的也可以通过yield达到单线程情况下并发操作的效果:next和_ __next__:作用相同 只是用法不同 它们既可以唤醒yield 也可以接收yield传递的值 send:还可以唤醒yield 接收yield传递的值 而且还可以唤醒yield 传递一个值# _ * _ coding: utf-8 _ * _ #来实现生成器并发操作 进口timedef consum:打印%s准备吃包子了! % nam:包子= yield print( 包子[%s]来了 被[%s]吃了! %(包子 姓名))def produc: c =消费者(姓名)c2 =消费者( b )c. _ _下一个_ c2 _ _ n:时间 睡眠(1)打印( 做了2个馒头! c .发送(i) c2 .发送(i)制作人( 飞某人 )标签:发电机功能相关内容请关注本站点。
win11激活码大全(window11激活)
笔记本电脑hdd可以装ssd吗
tc安卓版ui怎么预览,摄像机无法预览UI请问如何才能让摄像机看到UI
怎么去除软件广告,怎样关掉app里面的广告
戴尔安装win10系统蓝屏(戴尔电脑重装系统蓝屏怎么办)
python中的生成器send的作用(python中的生成器函数)
不玩游戏笔记本电脑推荐,不玩游戏到底买啥笔记本好用
微信出现视频号什么意思呀(微信出现视频号是怎么回事)
防止u盘中病毒的方式(防止u盘丢失的方法)
win10激活工具操作教程图解(win10激活工具操作教程图片)
台式机电脑cpu性能排行,电脑的处理器排名
荣耀7cpu怎么样,荣耀7cpu 怎么样
中兴u288免提怎么开
5600xb560(5600x加1650)
本地磁盘图标异常修复(本地磁盘图标显示不正常)
usb与电脑连接不上怎么回事(usb连接电脑没反应怎么办)
笔记本加固态硬盘的好处在哪,笔记本电脑换个固态硬盘有什么好处
主板电源开关正负极(电脑开关正负极怎么接)
苹果12怎么关闭运行app(苹果12手机关闭运行程序)
阿里巴巴台湾(阿里回应退出台湾)