python之路--day11---迭代器和生成器

Posted 木夂各

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之路--day11---迭代器和生成器相关的知识,希望对你有一定的参考价值。

迭代:

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

 

为什么要有迭代器:

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

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

 

可迭代对象

  内置有__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循环,我们可以实现不依赖索引取值

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

for循环的工作原理

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

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

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

 

迭代器的优缺点

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

缺点:无法获长度

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

 

 

 

生成器

  函数内包含有yield关键字

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

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

 

以上是关于python之路--day11---迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章

python之路---迭代器和生成器

Python成长之路第五篇:Python基础之迭代器和生成器

python之路——迭代器和生成器

python之路:Day04 --- Python基础4

python函数:迭代器和生成器

Python全栈之路Day22