已复制
全屏展示
复制代码

Python生成器 迭代器 可迭代对象


· 2 min read

迭代器

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

  • 迭代是Python最强大的功能之一,是访问集合元素的一种方式。
  • 迭代器是一个可以记住遍历的位置的对象。
  • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
  • 迭代器可通过next()方法获取下一个值。
  • 字符串,列表或元组对象都可用于创建迭代器。
  • 任何实现了__iter__()__next__()方法的对象都是迭代器。__iter__()返回迭代器自身,__next__()返回容器中的下一个值
from collections import Iterable


class A:
    def __init__(self):
        self.__content = [1,2,3,4,5]

    def __iter__(self):
        return self

    def __next__(self):
        if self.__content:
            return self.__content.pop(0)
        else:
            raise StopIteration

a = A()
print(isinstance(a, Iterable))
for i in a:
    print(i)
    

生成器

  • 生成器是一种特殊的迭代器,它的返回值不是通过return, 而是用yield
  • 生成器算得上是Python语言中最吸引人的特性之一,是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()__next__()方法了,只需要一个yiled关键字。生成器一定是迭代器, 反之不成立.
  • 生成器有两种实现方法:生成器表达式、生成器函数

生成器表达式

a = (i for i in [1, 2, 3, 4])
print(type(a))
for i in a:
    print(i)
    

生成器函数

def a():
    i = 0
    while i != 10:
        yield i
        i += 1

x = a()
print(next(x), 'next')
for i in x:
    print(i)
    

可迭代对象

凡是可作用于for循环的对象都是 Iterable 类型(可迭代对象)。

list、tuple、dict、set、strPython的这些对象是可迭代对象,而不是迭代器,因为他们不能被next()函数调用,但是可以通过iter()函数把它们转换成迭代器对象。

a = [1, 2, 3, 4]
print(type(a))
b = iter(a)
print(type(b))
🔗

文章推荐