Python基础:迭代器(Iterators)详解

什么是迭代器?

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

1. 迭代对象

  Python中使用迭代器的地方很多,大多数的容器对象都是可迭代对象,如列表、元组、字典、字符串等,均可以使用for语句进行迭代循环,如

for element in [1,2,3]:
    print(element)
for element in ('a','b','c'):
    print(element)
for key in {'one':1,'two':2}:
    print(key)
for char in 'abc':
    print(char)
for line in open('test.txt',encoding='utf-8'):
    print(line,end=' ')

  这种访问风格清晰、简洁又方便。
  迭代器的使用非常普遍并使得 Python 成为一个统一的整体。 在幕后,for语句会在容器对象上调用iter()
  该函数返回一个定义了__next__() 方法的迭代器对象,此方法将逐一访问容器中的元素。 当元素用尽时,__next__() 将引发 StopIteration 异常来通知终止for 循环。 可以使用next() 内置函数来调用 __next__() 方法。

2. 使用 next()方法

Python基础:迭代器(Iterators)详解_第1张图片
  字符‘abc’可以正常使用next()三次,当迭代次数超过了字符串中的元素个数,就会抛出StopIteration异常

3. 其他迭代器示例

# 使用内置的 iter() 和 next() 函数
my_list = [1, 2, 3, 4, 5]
my_iterator = iter(my_list)

# 逐个输出列表中的元素
print(next(my_iterator))  # 输出 1
print(next(my_iterator))  # 输出 2
# 使用生成器函数创建迭代器
def square_generator(n):
    for i in range(n):
        yield i ** 2

squares = square_generator(5)
for square in squares:
    print(square)
# 使用 enumerate() 构建迭代器获取元素和索引
my_list = ['apple', 'banana', 'orange']

for index, value in enumerate(my_list):
    print(f"Index: {index}, Value: {value}")
# 使用 zip() 合并多个可迭代对象
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

for name, age in zip(names, ages):
    print(f"Name: {name}, Age: {age}")

4. 自定义迭代器

4.1 自定义iter()和next()

定义一个方法 返回一个带有方法的对象。如果类 定义,然后可以返回:__next__()__iter__()self

class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

rev = Reverse('spam')
iter(rev)

for char in rev:
    print(char)

4.2 自定义迭代器中实现斐波那契数列

class Fibonacci:
    def __init__(self, limit):
        self.limit = limit
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.a <= self.limit:
            result = self.a
            self.a, self.b = self.b, self.a + self.b
            return result
        else:
            raise StopIteration

fib_iter = Fibonacci(20)
for num in fib_iter:
    print(num)

  生成:
Python基础:迭代器(Iterators)详解_第2张图片
  使用迭代器的主要优势是它们不需要在开始时就加载整个数据集到内存中。这对于大数据集或者流数据尤其有用。
  迭代器是Python中一个强大而灵活的工具,可以简化遍历复杂数据结构的过程。通过理解和使用迭代器,可以编写出更高效、更优雅的Python代码。

  参考:迭代器官方文档

你可能感兴趣的:(Python详解,python,开发语言,迭代器,容器对象)