📜  实际的 Python 迭代器 - Python (1)

📅  最后修改于: 2023-12-03 15:25:09.865000             🧑  作者: Mango

实际的 Python 迭代器 - Python

什么是迭代器?

在 Python 中,迭代器是一种用于遍历集合的对象。迭代器在 Python 中的使用非常广泛,例如在 for 循环语句中使用。

实际的 Python 迭代器

Python 中的实际迭代器是通过实现迭代器协议来实现的。迭代器协议需要实现两个方法:iter()和__next__()方法。

iter()方法返回迭代器对象自身,next()方法返回下一个元素,如果没有元素了,则抛出StopIteration异常。

class MyIterator:
    def __init__(self, my_list):
        self.my_list = my_list
        self.current = 0
        
    def __iter__(self):
        return self
        
    def __next__(self):
        if self.current < len(self.my_list):
            ele = self.my_list[self.current]
            self.current += 1
            return ele
        else:
            raise StopIteration()

# 使用MyIterator
my_list = [1, 2, 3, 4, 5]
my_iterator = MyIterator(my_list)
for ele in my_iterator:
    print(ele)
内置的 Python 迭代器

Python 语言中,有很多内置的迭代器,例如 range、enumerate、zip 等函数都可以作为一个迭代器。

# 使用range作为迭代器
for i in range(5):
    print(i)

# 使用enumerate作为迭代器
my_dict = {'a': 1, 'b': 2, 'c': 3}
for k, v in enumerate(my_dict):
    print(k, v)
    
# 使用zip作为迭代器
my_list1 = [1, 2, 3]
my_list2 = ['a', 'b', 'c']
for ele1, ele2 in zip(my_list1, my_list2):
    print(ele1, ele2)

以上三个例子中,range、enumerate、zip 都返回了一个迭代器对象,我们可以使用 for 循环语句来遍历这些迭代器对象。

高级迭代器技巧

Python 中的迭代器还支持一些高级技巧,例如迭代器生成器、迭代器链式调用、迭代器表达式等等。

# 迭代器生成器
def my_generator():
    yield 1
    yield 2
    yield 3

for ele in my_generator():
    print(ele)

# 迭代器链式调用
my_list = [1, 2, 3, 4, 5]
my_iterator = map(lambda x: x * 2, filter(lambda x: x > 2, my_list))
for ele in my_iterator:
    print(ele)

# 迭代器表达式
my_list = [1, 2, 3, 4, 5]
my_iterator = (x * 2 for x in my_list if x > 2)
for ele in my_iterator:
    print(ele)

以上三个例子中,迭代器生成器利用了 yield 关键字来实现、迭代器链式调用利用了 map 和 filter 函数返回的迭代器来实现、迭代器表达式则使用了一种更加简便的迭代器表达方式。