博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4.2 列表生成式、迭代器与生成器
阅读量:6279 次
发布时间:2019-06-22

本文共 1069 字,大约阅读时间需要 3 分钟。

一、列表生成式

用列表生成式可以很快捷的用for循环或if判断语句快速生成想要的列表,使原本需要多行的操作简化为一行

例:

a=[i**2 for i in range(4)]=[0,1,4,9]

若正常生成为:

a=[]

for i in range(4):

  a.append(i**2)

 

二、生成器(generator)

若列表有上百万个元素,不仅占用很大的空间,且如果我们只需访问前面几个元素,则后面元素白白占用空间了

生成器是将列表元素按某种推算法则,在循环过程中不断推算后续元素的计算机制

1、生成器的创建方式:

【1】将列表生成式的()改为[]

【2】在函数中插入yield x

2、生成器的取值方法:

只有一个方法:__next__()

只记录当前的位置,无法取之前的值,无法跳跃取值,只能一个一个取值

 

三、用生成器实现生产者消费者模型

原理:在函数中插入yield实现暂时切出函数,待后续返回值时再从函数暂停的地方继续执行,并且可以通过send()往函数传值

例:

def produce():     a=0     while a<100:         a+=1         yield a   #通过函数不断生成a     return("down") def consummer():     num=0     while num<100:         num=yield    #通过生成器每次循环从外部获得num         print("get:"+str(num)) p=produce() c=consummer() c.__next__() for i in range(100):     c.send(p.__next__())   #赋值给断点处 四、迭代器 1、可以直接作用于for循环的对象统称为可迭代对象:Iterable,可以使用isinstance判断一个对象是否为可迭代对象 例: isinstance([],Iterable) True 2、可以被next函数调用并不断返回下一个值的对象称为迭代器:Iterator,可以使用isinstance判断一个对象是否为迭代器对象 例: isinstance([],Iterator) False 3、生成器就是迭代器,但列表、字典等虽然是可迭代对象,但是不是迭代器 4、用iter()可以将可迭代对象变成迭代器

转载于:https://www.cnblogs.com/renhuaIT/p/9519476.html

你可能感兴趣的文章
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
基于Internet的软件工程策略
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>