博客
关于我
python 生成器
阅读量:131 次
发布时间:2019-02-27

本文共 748 字,大约阅读时间需要 2 分钟。

生成器是一种特殊的函数,它使用yield语句来产生值。在编程中,生成器非常有用,因为它们能在不影响主程序执行的同时,逐次生成大量数据。

让我们来看一个例子。以下是一个生成斐波那契数列的生成器函数:

def fibonacci(n):    a, b, counter = 0, 1, 0    while True:        if counter > n:            return        yield a        a, b = b, a + b        counter += 1

当我们调用这个函数并传入一个参数时,它会返回一个迭代器。例如:

f = fibonacci(10)

接下来,我们可以使用next()函数来逐步获取生成器的值。每次调用next(),生成器会执行到yield语句,然后暂停并返回当前的值。下一次调用时,它会从暂停的位置继续执行。

if __name__ == '__main__':    while True:        try:            print(next(f), end=" ")        except StopIteration:            break

生成器有两个主要特点:

  • 直接调用生成器函数会返回一个迭代器。这意味着生成器在第一次使用时会执行到第一个yield语句,并将初始值返回。

  • 使用next()函数可以控制生成器的执行。当执行到yield语句时,生成器会将当前的执行状态保存,然后返回yield的值。下次调用next()时,生成器会从保存的状态继续执行。

  • 生成器的这种设计模式在处理大型数据或资源密集型任务时特别有用,因为它可以在需要时逐次生成数据,而不会一次性占用过多内存。

    转载地址:http://ibkb.baihongyu.com/

    你可能感兴趣的文章
    PyQt4 代码在 PyQt5 (QHeaderView) 上不起作用
    查看>>
    PyQt4 到 PyQt5 ->mainFrame() 已弃用,需要修复才能加载网页
    查看>>
    PyQt4, class:mouseButtons用法
    查看>>
    PyQt4参考文档
    查看>>
    PyTorch Lightning:通过分布式训练扩展深度学习工作流
    查看>>
    PyQt5 - QThread:在线程仍在运行时被销毁
    查看>>
    PyQt5 - 如何从工作线程发出信号以通过 GUI 线程调用事件
    查看>>
    PyQt5 Designer 不工作:此应用程序无法启动,因为无法初始化 Qt 平台插件
    查看>>
    PyQt5 QLCNumber 没有更新
    查看>>
    PyQt5 TabWidget选项卡BarClicked TypeError:本机Qt信号不可调用
    查看>>
    PyQt5 从 PyQt4 转换信号代码
    查看>>
    PyQt5 和 asyncio:从永不完成的收益
    查看>>
    PyQt5 和 Django:如何使用 HTTP 请求(Multipart-form)上传图像?
    查看>>
    PyQt5 按钮运行功能和更新 LCD
    查看>>
    pyqt5 获取Qlabel中的图片并对其进行处理(包括Qimage转换为Mat)
    查看>>
    pyqt5 设置控件在最上层或者在下层
    查看>>
    pyqt5 设置网格布局的间距
    查看>>
    pyTorch Hub 系列#4:PGAN — GAN 模型
    查看>>
    PyQt5-基本窗口控件-QMainWindow
    查看>>
    PyQt5:如何安装/运行 Qt 设计器
    查看>>