【Python快速上手(十一)】

Python快速上手(十一)

Python3 迭代器与生成器

迭代器(Iterator)和生成器(Generator)是 Python 中用于处理可迭代对象的重要概念,它们可以帮助你高效地处理大量数据或无限序列。

迭代器(Iterator)

迭代器是一个对象,它实现了迭代器协议(Iterator Protocol),即实现了 iter() 和 next() 方法。迭代器可以逐个返回元素,直到没有元素可返回为止。迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

** 创建和使用迭代器**
把一个类作为一个迭代器使用需要在类中实现两个方法__iter__() __next__() 。__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了__next__() 方法并通过StopIteration异常标识迭代的完成。__next__() 方法(Python 2 里是next())会返回下一个迭代器对象。StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发StopIteration 异常来结束迭代。

# 创建一个迭代器
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):
            raise StopIteration
        value = self.data[self.index]
        self.index += 1
        return value

# 使用迭代器
my_iterator = MyIterator([1, 2, 3, 4, 5])
for item in my_iterator:
    print(item)

生成器(Generator)

生成器是一种特殊的迭代器,它使用函数来生成值,并且只在需要时才生成值,节省了内存空间。生成器使用 yield 关键字来暂停函数执行并返回值,然后在下一次调用时从上一次暂停的位置继续执行。yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值,而不是一次性返回所有结果。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回。然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果。调用一个生成器函数,返回的是一个迭代器对象。

# 创建一个生成器
def my_generator(data):
    for item in data:
        yield item

# 使用生成器
gen = my_generator([1, 2, 3, 4, 5])
for item in gen:
    print(item)

区别

  1. 实现方式:
  • 迭代器可以通过定义一个类来实现,需要手动编写 iter() 和 next() 方法。
  • 生成器可以通过定义一个函数来实现,使用 yield 关键字来暂停函数执行并返回值。
  1. 内存占用:
  • 迭代器需要一次性生成所有的元素并保存在内存中。
  • 生成器只在需要时生成元素,节省了内存空间。
  1. 语法简洁性:
  • 生成器通常比迭代器更简洁易读,因为它们使用函数的形式定义,避免了显式编写 iter() 和 next() 方法。

注意事项

  • 当处理大量数据或需要节省内存空间时,推荐使用生成器来处理数据。
  • 生成器在处理无限序列时特别有用,因为它们只在需要时生成值。

相关推荐

  1. Python快速上手)】

    2024-05-03 22:04:05       12 阅读
  2. Python快速上手)】

    2024-05-03 22:04:05       13 阅读
  3. Python快速上手)】

    2024-05-03 22:04:05       16 阅读
  4. 【php快速上手)】

    2024-05-03 22:04:05       13 阅读
  5. Python快速上手三)】

    2024-05-03 22:04:05       13 阅读
  6. Python快速上手九)】

    2024-05-03 22:04:05       7 阅读
  7. Python快速上手(二二)】

    2024-05-03 22:04:05       11 阅读
  8. 【flask快速上手)】

    2024-05-03 22:04:05       14 阅读
  9. Python快速上手(六)】

    2024-05-03 22:04:05       13 阅读
  10. Python快速上手(四)】

    2024-05-03 22:04:05       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 22:04:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 22:04:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 22:04:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 22:04:05       20 阅读

热门阅读

  1. 牛客面试1

    2024-05-03 22:04:05       11 阅读
  2. QT-this关键字

    2024-05-03 22:04:05       10 阅读
  3. 设计模式:建造者模式

    2024-05-03 22:04:05       10 阅读
  4. Visual Studio C++ 的一个简单示例

    2024-05-03 22:04:05       11 阅读
  5. 模拟退火算法matlab代码

    2024-05-03 22:04:05       12 阅读
  6. 【软测学习笔记】MySQL入门Day02

    2024-05-03 22:04:05       13 阅读
  7. 算法===二分查找

    2024-05-03 22:04:05       12 阅读
  8. 【Qt】Qt输出多页pdf

    2024-05-03 22:04:05       12 阅读