Python可迭代对象和迭代器对象
可迭代对象iterable:
- 对象字面意思:Python中一切皆对象。一个实实在在存在的值。
- 可迭代:更新迭代。迭代是一个重复的过程,每次重复是基于上一次的结果而继续的,每次都有新的内容。
- 可迭代对象:可以进行循环更新的一个实实在在的值。
- 专业角度:内部含有'_ iter _'方法的对象。
- 目前学过的可迭代对象:
str,list,tuple,dic,set,range()。
获取一个对象的所有方法:dir()
dir():将所有方法以字符串的方式,放在一个列表中,返回这个列表。
# 例: s = 'abc'
print(dir(s))
判断一个对象是否是可迭代对象:'_iter_' in dir()
例:s = 'abc'
print('__iter__' in dir(s)) # 返回 True 即表示'__iter__'在这个列表中,此对象为可迭代
可迭代对象优点:
- 1.存储的数据能直接显示,比较直观。
- 2.拥有的方法比较多,操作方便。
缺点:
- 1.占内存
- 2.不能直接通过for循环,只能通过索引,key取值
注: for循环能进行取值是因为在底层做了转换,将可迭代对象转换成迭代器,然后取值。
迭代器对象iterator:
- 字面意思:可迭代取值的工具(数据结构)。
- 专业角度:内部含有' _ _iter_ _'方法并且含有'_ _next_ _' 方法的对象就是迭代器。
- 比如:文件句柄。
# 判断是否是迭代器:
'__iter__' in dir(对象) and '__next__ in dir(对象)
可迭代对象转换成迭代器:
s = 'abc'
obj = iter(s) # 将s转换为迭代器,也可用 s.__iter__()
print(obj) # <str_iterator object at 0x0000000001E1B040>
print(next(obj)) # a 对迭代器进行取值
print(next(obj)) # b 执行一次取一个值
print(next(obj)) # c 多一个next会报错 StopIteration
迭代器调用iter()方法得到的是迭代器本身,这样做是使for循环的工作机制一致
for 循环工作机制(也可称之为迭代器循环):
1、调用iter()方法得到一个可迭代对象
2、迭代器对象调用next()得到一个返回值,将该值赋值给变量.
3、循环步骤2,直到抛出Stopiteration异常,for循环会捕捉异常然后停止循环
d = {'a':1,'b':2,'c':3}
for i in d: # for会将d调用iter()方法,若d本身为迭代器,那么调用iter方法相当于迭代器本身
print(i)
- list() 原理同for循环
迭代器优点:
- 1.节省内存
- 迭代器在内存中相当于只占一个数据的空间:因为每次取值上一条数据会在内存中释放,再加载当前的此条数据。
- 2.惰性机制
- next一次取一个值,绝不多取值。
迭代器缺点:
- 1.速度慢,以时间换空间。
- 2.只能往下取值,不走回头路
- 3.不直观。操作方法单一。
while循环模拟for循环对可迭代对象进行取值的机制:
# while循环也称为条件循环
li = [11,22,33,44,55,66,77,88]
obj = iter(li)
while 1:
try:
print(next(obj))
except StopIteration:
break
Python可迭代对象和迭代器对象的更多相关文章
- Python中的可迭代对象与迭代器对象
刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...
- python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器
复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象----> 延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...
- python基础一 ------可迭代对象和迭代器对象
可迭代对象和迭代器对象:前者生成后者 比喻:10个硬币都可以一一数(迭代),放入到存钱罐(可以取钱的那种),那这个存钱罐就是一个迭代器对象 需求:从网络抓取各个城市气温信息,并依次显示若依次抓取较多的 ...
- python迭代-可迭代对象与迭代器对象
可迭代对象与迭代器对象 问题举例 某软件要求,从网络抓取各个城市的气温信息,并依次显示: 北京:15~22 上海:18~23 ...... 如果一次抓取所有城市气温信息再显示,显示第一个城市的气温时会 ...
- Day 13 可迭代对象,迭代器对象,for循环迭代,生成器对象,枚举对象
一.迭代器概念:# 器:包含了多个值的容器# 迭代:循环反馈(一次从容器中取出一个值)# 迭代器:从装有多个值的容器中一次取出一个值给外界# ls = 'abcdef'ls = [1, 2, 3, 4 ...
- 可迭代对象,迭代器对象,for循环
迭代器:迭代的工具.迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的.如计算机中的迭代开发,就是基于软件的上一个版本更新.以下代码就不是迭 ...
- 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象
8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...
- day 13 迭代器、可迭代对象、迭代器对象、生成器、生成器对象、枚举对象
迭代器大概念 # 迭代器:循环反馈的容器(集合类型)# -- 不同于索引取值,但也可以循环的从容器对象中从前往后逐个返回内部的值# 优点:不依赖索引,完成取值# 缺点:不能计算长度,不能指定位取值( ...
- day14带参装饰器,迭代器,可迭代对象 , 迭代器对象 ,for迭代器 , 枚举对象
复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...
随机推荐
- ajax之---上传图片和预览
views.py def upload_img(request): nid=str(uuid.uuid4()) ret={'status':True,'data':None,'message':Non ...
- Linux实战(11):Centos安装Jenkins
前言 本文采用的是yum安装方式. 环境安装 以下操作为配置java8,node,maven,注意装之前请将其他版本删除干净, 离线包下载 tar -zxvf apache-maven-3.6.3-b ...
- h5页面在浏览器上好好的,到手机上熄火了又看不到报错信息怎么办?
背景 最近小编接了一个新需求,用h5开发页面,通过webview嵌入原生APP中,自己在浏览器上开发爽歪歪,什么信息都能看到,可是一嵌入原生app中,瞬间就熄火了,啥也看不到了,不知道为什么,反正就是 ...
- 解Bug之路-记一次对端机器宕机后的tcp行为
解Bug之路-记一次对端机器宕机后的tcp行为 前言 机器一般过质保之后,就会因为各种各样的问题而宕机.而这一次的宕机,让笔者观察到了平常观察不到的tcp在对端宕机情况下的行为.经过详细跟踪分析原因之 ...
- PostGreSQL不同索引类型(btree & hash)的性能问题
在关系型数据库调优中,查询语句涉及到的索引类型是不得不考虑的一个问题.不同的类型的索引可能会适用不同类型的业务场景.这里我们所说的索引类型指的是访问方法(Access Method),至于从其他维度区 ...
- Android如何使用注解进行代码检查
原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流! Android Studio 内置了代码检查工具 Lint,可在菜单栏选择 Analyze > Inspect Code 执 ...
- 获取NX特征名称(无时间戳)
NX获取特征名称使用UF_MODL_ask_feat_name这个接口,接口说明里有一段话: Returns a character string containing the feature typ ...
- 使用Navicat连接MySQL8.0版本报1251错误
出现1251错误是因为,MySQL8.0版本改变了密码的验证规则caching_sha2_password,MySQL之前的版本验证规则是mysql_native_password,现在需要修改MyS ...
- Android作业 0923
计算器小应用 package com.example.myhomework2; import androidx.appcompat.app.AppCompatActivity; import andr ...
- Centos-文本过滤-grep
grep 文本过滤,对文本的每一行进行关键字搜索,如果找到则输出 相关选项 -A 除了列出符合关键字的行外,还输出符合关键字行后多少行内容 -c 只显示符号条件的行号 -f 批量搜索,把关键字写入到 ...