Python基础(迭代器)

一、迭代器

  概述:     

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

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

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

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

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

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

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

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

  可迭代对象:

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

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

    非序列:字典、文件

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

 

  生成迭代器的两种方式:

 1 # 使用对象内置的__iter__()方法生成迭代器
 2 L1 = [1,2,3,4,5,6]
 3 I1 = L1.__iter__()
 4 print(I1)
 5 # >>>:<listiterator object at 0x7fe4fd0ef550>
 6 print(I1.__next__())
 7 # >>>:1
 8 print(I1.__next__())
 9 # >>>: 2
10 print(I1.__next__())
11 #>>> : 3

 

 1 # 使用内置工厂函数生成迭代器
 2 L1 = [1,2,3,4,5,6]
 3 I2 = iter(L1)
 4 print(I2)
 5 #>>> : <listiterator object at 0x7fe4fd0ef610>
 6 print(I2.__next__())
 7 # >>> :1
 8 print(I2.__next__())
 9 # >>> :2
10 print(I2.__next__())
11 # >>> :3
12 print("内建next()方法:",next(I2))

 

  StopIteration

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

  Python强大的for循环:

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

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

 1 #for循环实现机制
 2 li=["alex","kelvin","elvin"]
 3 
 4 for i in li:
 5     print(i)
 6 """
 7 输出结果:
 8 alex
 9 kelvin
10 elvin
11 """
12 
13 
14 #上面的for循环实现等同于:
15 Li=li.__iter__()
16 count=len(li)
17 while count:
18     print(Li.__next__())
19     count-=1
20 """
21 输出结果:
22 alex
23 kelvin
24 elvin
25 """
26 
27 #上面的for循环实现原理如下:
28 Li=li.__iter__()
29 while True:
30     try:
31         print(Li.__next__())
32     except StopIteration:
33         break
34 """
35 输出结果:
36 alex
37 kelvin
38 elvin
39 """

 

说明:

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

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

 

posted @ 2019-01-04 17:01  佛祖让我来巡山  阅读(207)  评论(0编辑  收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网