关于python:Python黑魔法探秘生成器和迭代器的神奇力量

42次阅读

共计 1586 个字符,预计需要花费 4 分钟才能阅读完成。

在 Python 中,生成器和迭代器是实现惰性计算的两种重要工具,它们能够帮忙咱们更无效地解决数据,特地是在解决大数据集时,能够显著缩小内存的应用。接下来,咱们将具体介绍这两种工具。

一、迭代器

迭代器是一种非凡的对象,它能够遍历一个汇合中的所有元素。任何实现了__iter__()和__next__()办法的对象都能够被称为迭代器。

1.1 创立迭代器

首先,让咱们通过一个简略的例子来看看如何创立一个迭代器:

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration

            # 应用自定义的迭代器
my_iter = MyIterator("Hello")
for char in my_iter:
    print(char)

在这个例子中,咱们创立了一个迭代器,它能够一一返回给定字符串中的所有字符。当咱们试图获取下一个元素时,如果还有元素可供返回,就返回该元素,否则就抛出 StopIteration 异样。

1.2 应用内置的迭代器

Python 中有许多内置的迭代器,如列表迭代器、字典迭代器、文件迭代器等。上面是一些例子:

# 列表迭代器
list_iter = iter([1, 2, 3])
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))

# 字典迭代器
dict_iter = iter({"a": 1, "b": 2, "c": 3})
print(next(dict_iter))
print(next(dict_iter))
print(next(dict_iter))

# 文件迭代器
with open("test.txt") as file:
    for line in file:
        print(line, end="")

二、生成器

生成器是一种非凡的迭代器,它更加简洁和灵便。生成器能够通过两种形式创立:生成器函数和生成器表达式。

2.1 生成器函数

生成器函数是蕴含 yield 关键字的函数。当调用生成器函数时,它会返回一个生成器对象,咱们能够通过 next 函数或 for 循环来获取生成器中的元素。
以下是一个生成器函数的例子:

def my_generator(n):
    i = 0
    while i < n:
        yield i
        i += 1

        # 应用自定义的生成器
for num in my_generator(5):
    print(num)

在这个例子中,生成器函数每次都会生成一个新的值,并通过 yield 关键字返回该值。当咱们再次调用 next 函数或进行下一次循环时,生成器函数会从上次返回的中央继续执行,直到再次遇到 yield 关键字。

2.2 生成器表达式

生成器表达式是一种更简洁的创立生成器的办法,它的语法模式与列表推导式相似,只不过是把方括号 [] 换成了圆括号 ()。
以下是一个生成器表达式的例子:

# 创立一个生成器表达式
gen_expr = (i ** 2 for i in range(5))

# 应用生成器表达式
for num in gen_expr:
    print(num)

在这个例子中,生成器表达式生成了一个 0 到 4 的平方数的生成器。咱们能够像应用其余迭代器一样,应用 next 函数或 for 循环来获取生成器中的元素。
总结一下,无论是迭代器还是生成器,其本质都是遍历数据集并返回其中的元素。只不过生成器提供了一种更为简洁和灵便的形式,使咱们能够更不便地创立和应用迭代器。在解决大数据集时,它们都是十分有用的工具。

三、最初

如果感觉本文对你有帮忙记得 点个关注,给个赞,加个珍藏,更多精彩内容欢送查看。

正文完
 0