一、迭代器

  概述:     

    迭代是Python最强大的功能之一,是访问集合元素的一种方式。

    迭代器是一个可以记住遍历的位置的对象。

    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    迭代器有两个基本的方法:iter()next()

    字符串,列表或元组对象都可用于创建迭代器:

  延迟计算或惰性求值 (Lazy evaluation):

    迭代器不要求你事先准备好整个迭代过程中所有的元素。仅仅是在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。

这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。

  可迭代对象:

    迭代器提供了一个统一的访问集合的接口。只要是实现了__iter__()或__getitem__()方法的对象,就可以使用迭代器进行访问。

    序列:字符串、列表、元组

    非序列:字典、文件

    自定义类:用户自定义的类实现了__iter__()或__getitem__()方法的对象

  生成迭代器的两种方式:

 # 使用对象内置的__iter__()方法生成迭代器
L1 = [1,2,3,4,5,6]
I1 = L1.__iter__()
print(I1)
# >>>:<listiterator object at 0x7fe4fd0ef550>
print(I1.__next__())
# >>>:1
print(I1.__next__())
# >>>: 2
print(I1.__next__())
#>>> : 3
 # 使用内置工厂函数生成迭代器
L1 = [1,2,3,4,5,6]
I2 = iter(L1)
print(I2)
#>>> : <listiterator object at 0x7fe4fd0ef610>
print(I2.__next__())
# >>> :1
print(I2.__next__())
# >>> :2
print(I2.__next__())
# >>> :3
print("内建next()方法:",next(I2))

  StopIteration

    StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__()next()方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

  Python强大的for循环:

    for循环实现的原理就是调用可循环对象(列表,元组,字符串等)的__iter__()或iter()方法,使其变成符合迭代器协议的迭代器对象,然后调用迭代器对象的__next__()或next()方法依次不可逆的获取    迭代器对象中的元素。

    下面让我们通过三段代码来学习for循环的本质:

 #for循环实现机制
li=["alex","kelvin","elvin"] for i in li:
print(i)
"""
输出结果:
alex
kelvin
elvin
""" #上面的for循环实现等同于:
Li=li.__iter__()
count=len(li)
while count:
print(Li.__next__())
count-=1
"""
输出结果:
alex
kelvin
elvin
""" #上面的for循环实现原理如下:
Li=li.__iter__()
while True:
try:
print(Li.__next__())
except StopIteration:
break
"""
输出结果:
alex
kelvin
elvin
"""

说明:

  for循环可用于任何可迭代对象

  for循环开始时,会通过迭代协议传输给__iter__()内置函数,从而能够从迭代对象中获得一个迭代器,返回的对象含有需要的__next__()方法。

Python基础(迭代器)的更多相关文章

  1. python基础——迭代器

    python基础——迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器 ...

  2. python基础—迭代器、生成器

    python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...

  3. python基础-迭代器和生成器

    一.递归和迭代 1.递归:(问路示例) 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 2.迭代:简单理 ...

  4. python基础 (迭代器回顾,生成器,推导式)

    1.迭代器回顾 可迭代对象:Iterable 可以直接作用于for循环的对象统称为可迭代对象:Iterable.因为可迭代对象里面存在可迭代协议,所以才会被迭代 可迭代对象包括: 列表(list) 元 ...

  5. python基础----迭代器、生成器、协程函数及应用(面向过程实例)

    一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...

  6. Python基础-迭代器&生成器&装饰器

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...

  7. python基础-迭代器

    1.迭代:指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果 是下一次重复的初始值 2.为什么要有迭代器 对于序列类型:str list tuple 可以依赖索引来迭代取值,但是对于d ...

  8. python基础--迭代器、生成器、内置函数、面向对象编程

    迭代器:迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问完结束.迭代器只能往前不会后退 迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果 迭代器:迭代取值的工具 使用迭代器的 ...

  9. python基础--迭代器、生成器

    (1)迭代器 可迭代对象和迭代器的解释如下: ''' 什么是对象?Python中一切皆对象,之前我们讲过的一个变量,一个列表,一个字符串,文件句柄,函数名等等都可称作一个对象,其实一个对象就是一个实例 ...

  10. Python基础—迭代器、生成器(Day13)

    一.迭代器 1.可迭代对象:遵循可迭代协议,内部含有__iter__方法的对象就叫做可迭代对象.(str.list.tulpe.dict.set) 查询数据类型的方法 s = 'laonanhai' ...

随机推荐

  1. Java 保留两位小数填坑

    下面直接上代码: DecimalFormat df1 = new DecimalFormat("#.00");DecimalFormat df2 = new DecimalForm ...

  2. stm.go

    package) ].ModRevision } func,, ,, ].ModRevision ].Value) }

  3. Form表单 JSON Content-type解析

    Form表单 JSON Content-type解析 1 表单Form概述 在Form表单中,参数一般有: action 表单提交的url method 提交方式:post get name 表单的属 ...

  4. 显著性检测(saliency detection)评价指标之NSS的Matlab代码实现

    calcNSSscore.m function [ score ] = calcNSSscore( salMap, eyeMap ) %calcNSSscore Calculate NSS score ...

  5. Bot Framework 搭建聊天机器人

    这周我来跟大家分享的是在Microsoft Build 2016上发布的微软聊天机器人的框架. 现如今,各种人工智能充斥在我们的生活里.最典型的人工智能产品就是聊天机器人,它既可以陪我们聊天,也可以替 ...

  6. Postman-----构建工作流程(用于某个请求完成后从指定的请求开始继续运行)

    使用场景: 当您开始运行某个集合时,所有的请求按照您在主程序中看到的顺序运行,但是在某些情况下,往往我们希望按顺序列出的请求A.B.C.D.E.F请求,在执行时不执行B.C请求,希望A请求完成后直接执 ...

  7. MYSQL—— year类型的使用与注意点!

    mysql的日期与时间类型:分为time.date.datetime.timestamp.year,主要总结下year的用法: 1.类型支持:year 与 year(4),注意无year(2)的定义方 ...

  8. Spring Framework学习要点摘抄

    以下摘自Spring Framework官方文档,版本Spring 4.3. <context:annotation-config/> implicitly registered post ...

  9. sum() 函数性能堪忧,列表降维有何良方?

    本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/mK1nav2vKykZaKw_TY-rtw Python 的内置函数 ...

  10. MFC多语言程序版本,在不同的windows系统上的使用

    如何使MFC程序界面支持多国语言?这次使用后给自己做一个总结. 我们使用vc6.0的版本来试验 1. 切换到资源视图,右键Dialog->Insert Copy 2. ok后,会出来一个语言的选 ...