迭代:

  迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值

为什么要有迭代器:

  数据类型的取值,字符串,列表,元组依靠索引可以取值,但是字典,集合,文件这些数据类型无法通过索引取值,

  那么迭代器提供了一种不依靠索引取值的方法,这个方法就是迭代器

可迭代对象

  内置有__iter__方法,执行该方法会拿到迭代器

    字符串,列表,元组,字典,集合,文件都是可迭代对象

迭代器对象

  内置有__next__方法,执行该方法会拿到迭代器对象中的一个值
  内置有__iter__方法,执行该方法会拿到迭代器本身

  文件是迭代器对象

注意:迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象

迭代器的使用

dic={'a':1,'b':2,'c':3}

iter_dic=dic.__iter__()   #可迭代对象执行_ _iter_ _方法得到的结果就是迭代器对象

           #迭代器对象内置有_ _iter_ _方法和_ _next_ _方法

iter_dic.__iter__() is iter_dic  #True   迭代器.__iter__()得到的仍然是迭代器本身

print(iter_dic.__next__())

print(iter_dic.__next__())

print(iter_dic.__next__()) #等同于next(iter_dic)

#迭代对象有几个值就需要执行几次,直到没有值可取

print(iter_dic.__next__()) #抛出异常StopIteration,标志迭代对象的值已经全部取出

#有了迭代器,我们就可以不依赖索引迭代取值了

iter_dic=dic.__iter__()

while 1:

  try:

    k=next(iter_dic)

    print(dic[k])

  except StopIteration:

    break

====================================================================

异常处理

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法:

try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生

================================================================================

for 循环

基于for循环,我们可以实现不依赖索引取值

 dic={'a':1,'b':2,'c':3}
for k in dic:
print(dic[k]

for循环的工作原理

1,执行in后对象的_ _iter_ _()方法,得到一个迭代器对象

2,执行_ _next_ _ 方法,将得到的值赋值变量,然后执行循环体代码

3,重复过程2,直到捕捉到异常StopIteration

迭代器的优缺点

优点:提供了一种不依赖索引的迭代方式

缺点:无法获长度

    只能一直往后取,无法往前取

生成器

  函数内包含有yield关键字

  再调用函数,就不会执行函数体代码,拿到的返回值就是一个生成器对象

注意:生成器本质就是迭代器,也就是说迭代器的用法也就是生成器的用法

python之路--day11---迭代器和生成器的更多相关文章

  1. python之路之迭代器与生成器

    一  迭代器 那么在研究迭代器之前首先应该要知道什么是迭代. 迭代:是一个重复的过程,并且每次重复都是建立基于上一次的结果而来的,所以在迭代的过程其实是在不断变化的. 迭代器:就是迭代取值的工具. 那 ...

  2. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  3. 完全理解 Python 迭代对象、迭代器、生成器

    完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun    本文源自RQ作者 ...

  4. python全栈开发-Day11 迭代器、生成器、面向过程编程

    一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...

  5. Python之模块,迭代器与生成器

    本节涉及内容: 1. 迭代器和生成器 2. 递归 3. 字符串格式化 4. 模块 内置模块 自定义模块 第三方模块 5. 序列化的模块 json pickle (一). 迭代器和生成器: 迭代器:  ...

  6. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

  7. 理解Python迭代对象、迭代器、生成器

    作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...

  8. python基础篇_005_迭代器和生成器

    Python迭代器和生成器 1.迭代器 迭代:可以将某个数据集内的数据“一个挨着一个的取出来” for i in range(1, 10, 2): # in 后面的对象必须是一个可迭代的 print( ...

  9. 【笔记】Python基础四:迭代器和生成器

    一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...

  10. Python开发——函数【迭代器、生成器、三元表达式、列表解析】

    递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...

随机推荐

  1. [HAOI2012]高速公路

    题面在这里 题意 维护区间加操作+询问区间任选两不同点途中线段权值之和的期望 sol 一道假的期望题... 因为所有事件的发生概率都相同,所以答案就是所有方案的权值总和/总方案数 因为区间加法自然想到 ...

  2. Java生成条码二维码

    一.概述 可用barcode4j或zxing等第三方库,推荐zxing. barcode4j资料链接:http://barcode4j.sourceforge.net/ zxing资料链接:https ...

  3. Lucene就是这么简单

    什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引 ...

  4. emacs在windows下打开报错原因

    最开始实在是想不通,最开始我明明就能正常使用,后来发现不能用了,过了几天才回过神来,我路径中有中文,换了一个没有中文的路径后打开正常了.太低级的错误了嘛,却那么难发现. 这些数字就是识别不出来我的中文 ...

  5. 设计模式——命令模式(C++实现)

    [root@ ~/learn_code/design_pattern/19_order]$ cat order.cpp #include <iostream> #include <s ...

  6. Beego 框架学习(一)

    Beego官网本身已经整理的非常详细了,但是作为一个学习者,我还是决定自己好好整理一下,这样在后面使用的时候自己对每部分才能非常熟悉,及时忘记了,也可以迅速定位自己要用的知识在哪里.当然也是对官网的一 ...

  7. 数字不断递增 可控制js

    (function($){ $.fn.numberRock=function(options){ var defaults={ speed:, count: }; var opts=$.extend( ...

  8. 微信公众号开发,weUi组件,问题总结

    1.实现上拉分页,Google兼容问题,weui框架提供的模板是这样的($(document.body).infinite()),在body定一个div通过这个div,实现上拉 $('#wrapper ...

  9. SpringMvc的传递参数方式 -- url / requestMapping

    在使用spring的项目中,前台传递参数到后台是经常遇到的事, 我们必须熟练掌握一些常用的参数传递方式和注解的使用,废话少说,直接上正文. 1. @requestMapping: 类级别和方法级别的注 ...

  10. 基于jQuery/zepto的单页应用(SPA)搭建方案

    这里介绍一个基于jquery或zepto的单页面应用方案,遵循尽可能简单的原则,使大家一目了然,只需配置一个路由,之后完全按照jq日常写法即可完成.可做学习使用,也可修改后用于一些业务逻辑简单的spa ...