迭代器

迭代:更新换代的过程,每次的迭代都必须基于上一次的结果

迭代器:迭代取值的工具

作用

迭代器提供了一种不依赖于索引取值的方式

根据以上对于迭代的描述,如果只是简单的重复,不算迭代,如下:

n = 0
while True:
print(n)
# 这只是简单重复,不算迭代

所以,迭代应该是“重复+每次迭代都是基于上一次的结果”

l = [1,2,3,4]
s = 'hello'
n = 0
while n < len(s):
print(s[n])
n += 1

可迭代对象

内置有__iter__()方法的都叫做可迭代对象

  # 对于这种 双下划线开头 双下划线结尾的方法

  # 我们读作“双下+方法名”

基本数据类型中,是可迭代对象的有:字符串(str)、列表(list)、元组(tuple)、字典(dict)、集合(set)

  另外 文件对象(file) 是可迭代对象,也是迭代器对象

str0 = 'bitten'
str0.__iter__()
print(type(str0)) # 字符串 list0=[1,2,3,]
list0.__iter__()
print(type(list0)) # 列表 tuple0 = (1,2,3)
tuple0.__iter__()
print(type(tuple0)) # 元组 dict0={'name':'bitten'}
dict0.__iter__()
print(type(dict0)) # 字典 set0={1,2,354,}
set0.__iter__()
print(type(set0)) # 集合
f1 = open('xxx.txt','w',encoding='utf-8')
res = f1.__iter__().__iter__().__iter__().__iter__()
print(f1 is res) # True
# 文件对象(执行内置的__iter__之后还是本身 没有任何变化):文件对象本身就是迭代器对象

迭代器对象

  可迭代对象执行内置的__iter__方法得到的就是该对象的迭代器对象

  迭代器对象需要满足的条件:

  1.内置有__iter__方法
  2.内置有__next__方法
  

    ps:迭代器一定是可迭代对象  
    而可迭代对象不一定是迭代器对象

  

  迭代器对象取值方法:

  必须调用__next__()方法

l = [1,2,3,4]
# 生成一个迭代器对象
iter_l = l.__iter__() # 迭代器取值 调用__next__
print(iter_l.__next__()) #
print(iter_l.__next__()) #
print(iter_l.__next__()) #
print(iter_l.__next__()) #
print(iter_l.__next__()) # 如果取完了 直接报错StopIteration
异常处理

#把上面这五行print改成下面的形式

# while True:
# try:
# print(iter_l.__next__())
# except StopIteration:
# # print('值已近取完啦')
# break

  迭代器对象无论执行多少次__iter__()方法得到的还是迭代器对象本身

  ps:文件对象作为迭代器对象,还内置了__iter__()

    因为for循环后面in(如果迭代器对象没有__iter__)

    是因为只有使用了__iter__()方法才能继续用__next__()取值

  迭代器取值的特点
  1. 只能往后依次取 不能返回取前面的值

for循环的本质

d = {'name':'bitten','password':'','hobby':'hiking'}
for i in d:
print(i)
# for循环后面的in关键 跟的是一个可迭代对象

  for循环内部的本质
    1.将in后面的对象调用__iter__转换成可迭代对象

        上面

7.15 迭代器 for循环的本质 生成器的更多相关文章

  1. Python中的可迭代对象/迭代器/For循环工作机制/生成器

    本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...

  2. Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象

    一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...

  3. python迭代器、装饰器和生成器

    装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 3.实 ...

  4. python 学习笔记3(循环方式;list初始化;循环对象/生成器/表推导;函数对象;异常处理)

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 16. 循环方式笔记: 1)range(0, 8, 2)   #(上限,下限,步长)  可以实现对元素或者下标的 ...

  5. python3 迭代器(Iterator)和生成器(generator)

    一.迭代器定义: 迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象: 集合数据类型如list.dict.str等是Iterable但不是Iterator,不过可以通过iter()函数获 ...

  6. python学习10—迭代器、三元表达式与生成器

    python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...

  7. Foreach能够循环的本质

    我们对foreach循环并不陌生,在C#中我们用得非常多,但是我们是否清楚foreach循环的本质呢? 众所周知,foreach循环能够遍历 数组  ,集合 .但是我们自己定义的一个类是否能够通过fo ...

  8. day13_7.15 迭代器和生成器

    1.迭代器 迭代就是一个更新换代的过程,每次迭代都必须基于上一次的结果. 迭代器就是迭代取值的工具.举个例子: while True: print('循环输出') 此代码会无限循环输出文字,是个死循环 ...

  9. Day 13 可迭代对象,迭代器对象,for循环迭代,生成器对象,枚举对象

    一.迭代器概念:# 器:包含了多个值的容器# 迭代:循环反馈(一次从容器中取出一个值)# 迭代器:从装有多个值的容器中一次取出一个值给外界# ls = 'abcdef'ls = [1, 2, 3, 4 ...

随机推荐

  1. 剑指offer第二版-8.二叉树的下一个节点

    描述:给定一棵二叉树和其中的一个节点,找出中序遍历序列的下一个节点.树中应定义指向左节点.右节点.父节点的三个变量. 思路: 1.如果输入的当前节点有右孩子,则它的下一个节点即为该右孩子为根节点的子树 ...

  2. Socket编程(C语言实现):socket()函数英文翻译

    最近开始研究使用Socket API来网络编程,想着把自己的感想.感悟写下来.我发现在编程之外还有不少概念性的东西要学习.我觉得应该有以下几点吧: 1.得了解下计算机网络的基本概念,如OSI的7层模型 ...

  3. STM32F0_HAL库驱动描述——HAL驱动程序概述

    HAL库文件结构: HAL驱动文件: 外设驱动API文件和头文件:包含了常见主要的通用API,其中ppp表示外设名称,如adc.usart.gpio.irda等: stm32f0xx_hal_ppp. ...

  4. Kafka FAQ

    报错如下: Unable to read additional data from client sessionid 0x15d2c867a770006 使用的kafka自带的zookeeper,测试 ...

  5. 消息中间件及IBM MQ

    MQ 消息中间件: 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源. 中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯.是连接两个独立应用程 ...

  6. 个人永久性免费-Excel催化剂功能第92波-地理地址与经纬度互转功能

    GPS设备和手机LBS的兴起,在地理信息存储过程中,在程序.应用级别是需要用经纬度去定位,而在数据分析的级别,特别是省市区镇街的分析,用到的是人可识别的文本类型存储,从设备中采集下来的数据和人工维护的 ...

  7. [Spring-Cloud-Alibaba] Sentinel 规则持久化

    在之前的练习中,只要应用重启,就需要重新配置,这样在我们实际的项目是非常不实用的,那么有没有办法把我们配置的规则保存下来呢?答案是YES,那么接下来,给大家来介绍如何将Sentinel规则持久化. D ...

  8. Error:Failed to resolve: com.android.support:support-annotations:26.0.2

    异常信息记录: Error:Failed to resolve: com.android.support:support-annotations:26.0.2 <a href="ins ...

  9. java练习---3

    //程序员:罗元昊 2017.9.6public class World{ public static void main(String[] args){ double p=3.14,i=5.50; ...

  10. python基础——字符串(string)

    字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可. str1 = 'python' str2 = " ...