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.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...
随机推荐
- [LeetCode]72. 编辑距离(DP)
题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1 ...
- MySQL<=>是什么鬼
官网描述 NULL-safe equal. This operator performs an equality comparison like the = operator, but returns ...
- Python反转链表
# -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None ...
- 软件工程与UML作业1
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
- JAVA | Java 解决跨域问题
JAVA | Java 解决跨域问题 Table of Contents 引言 什么是跨域(CORS) 什么情况会跨域 解决方案 前端解决方案 后端解决方案 具体方式 一.使用Filter方式进行设置 ...
- 7.Semaphore-信号量
- 有关java反射的几个小方法的作用和区别
1.Class类中 getXXX()和getDeclaredXXX()的作用和区别: 前者获取某个类的所有公共(public)的字段(or方法or构造函数),包括父类.后者获取所有的字段(or方法or ...
- BUUCTF[归纳]sql注入相关题目
这是我自己对于sql注入的部分ctf题型的归纳,均来自buuctf的平台环境. [0CTF 2016]piapiapia 我尝试了几种payload,发现有两种情况. 第一种:Invalid user ...
- Java 审计之XXE篇
Java 审计之XXE篇 0x00 前言 在以前XXE漏洞了解得并不多,只是有一个初步的认识和靶机里面遇到过.下面来 深入了解一下该漏洞的产生和利用. 0x01 XXE漏洞 当程序在解析XML输入时, ...
- Centos6.6x系统与unbutu18.04系统升级ssh到8.3版本
Centos6.6升级ssh5.3版本到ssh8.3版本 下载所需要的源码包: ]#wget https://files-cdn.cnblogs.com/files/luckjinyan/zlib-1 ...