Python学习笔记(五)--------Python迭代器

一、迭代器相关

迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表阵列)上遍访的接口,设计人员无需关心容器的内容。

关键点:遍访(遍历?)容器

二、迭代器特点

1.迭代器可以从集合的第一个数据开始访问数据,直到最后一个

2.迭代器只可向前访问,不能倒退(next()方法)

3.迭代器的两个基本方法:next()、iter()

三、Python中的迭代器

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

1.获取String类型的迭代器,while遍历

a, i = "Baldwin", 0
it = iter(a)
while i < len(a):
    print(next(it), end=" ")
    i += 1
E:\WorkSpaces\PycharmProjects\PyDemo\venv\Scripts\python.exe E:/WorkSpaces/PycharmProjects/PyDemo/cn/yzstu/__init__.py
B a l d w i n 
Process finished with exit code 0

2.for遍历

a = "Baldwin"
it = iter(a)
for a in it:
    print(a,end=" ")
E:\WorkSpaces\PycharmProjects\PyDemo\venv\Scripts\python.exe E:/WorkSpaces/PycharmProjects/PyDemo/cn/yzstu/__init__.py
B a l d w i n 
Process finished with exit code 0

四、创建迭代器

本段默认读者有面向对象的理解基础

如果我们想把一个类当做迭代器来使用,我们最基础的要实现__iter__() 与 __next__() 两个方法。

__iter__():返回一个迭代器对象,并在这个迭代器对象中实现了__next__()方法

__next__():在Python2中,这个方法名为next(),这个方法会返回下一个迭代器

class NumbersForIt:
    def __iter__(self):     # 创建 __iter__
        self.a = 1
        return self

    def __next__(self):     # 创建 __next__
        b = self.a
        self.a += 1
        return b


numbwes = NumbersForIt()
it = iter(numbwes)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
E:\WorkSpaces\PycharmProjects\PyDemo\venv\Scripts\python.exe E:/WorkSpaces/PycharmProjects/PyDemo/cn/yzstu/__init__.py
1
2
3
4
5
6

Process finished with exit code 0

五、生成器创建迭代器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

def generator():
    a = 1
    while True:
        yield a
        a += 1


it, b = generator(), 0
while b < 10:
    print(next(it), end=" ")
    b += 1
E:\WorkSpaces\PycharmProjects\PyDemo\venv\Scripts\python.exe E:/WorkSpaces/PycharmProjects/PyDemo/cn/yzstu/__init__.py
1 2 3 4 5 6 7 8 9 10 
Process finished with exit code 0

使用generator实现斐波那契数列

def generator():
    a, b = 1, 1
    while True:
        yield a
        a, b = b, a + b


it, m = generator(), 0
while m < 10:
    print(next(it), end=" ")     # 此时我们获取到的是上面a的值
    m += 1
E:\WorkSpaces\PycharmProjects\PyDemo\venv\Scripts\python.exe E:/WorkSpaces/PycharmProjects/PyDemo/cn/yzstu/__init__.py
1 1 2 3 5 8 13 21 34 55 
Process finished with exit code 0

六、总结

1.无论在哪一种语言中,迭代器的正确使用都很重要

2.yield的使用能够快速创建一个迭代器,需要注意的是,要在while中添加正确的迭代规则

发布了45 篇原创文章 · 获赞 113 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/shouchenchuan5253/article/details/104924003