Python yield 使用浅析

Python yield 使用浅析

yield 是 Python 中一个特殊的关键字,表示生成器的返回值,使用它可以让一个普通函数变成一个生成器函数,即每次遇到 yield 语句时候,函数会将结果返回,并在此处暂停执行,直到被唤醒后再恢复执行。

使用场景

  • 实现迭代器
  • 逐步批量处理大量数据
  • 内存使用控制
  • 代码整洁度

使用方法

简单的例子

def simple_generator():
    yield 1
    yield 2
    yield 3

gen = simple_generator()

print(next(gen))   # 输出:1
print(next(gen))   # 输出:2
print(next(gen))   # 输出:3
print(next(gen))   # 抛出 StopIteration 异常
  • 定义生成器函数 simple_generator()
  • 通过 yield 关键字来输出结果
  • 每次调用 next() 函数就会执行一个 yield 语句
  • 当 Python 解释器执行到函数中没有 yield 的代码行时,会抛出 StopIteration 异常表示生成器已经迭代完毕

带参数的例子

def sum_evens(maximum):
    sum_ = 0
    for i in range(maximum):
        if i % 2 == 0:
            sum_ += i
            yield sum_

gen = sum_evens(10)

print(next(gen))    # 输出:0
print(next(gen))    # 输出:2
print(next(gen))    # 输出:6
print(next(gen))    # 输出:12
  • 定义 sum_evens() 生成器函数,传入一个参数
  • 使用 for 循环计算每个偶数的和并保存到 sum_ 变量中
  • 通过 yield 关键字输出结果
  • 每次调用 next() 函数就会执行一个 yield 语句,并返回一个值,同时将函数的运行状态保存下来,以便下次继续运行

注意事项

  • 生成器对象必须通过函数调用生成,并且每次每个生成器对象只能使用一次,否则会抛出 StopIteration 异常。
  • 不能同时使用 returnyield 关键字,因为 return 会强制中断函数,而 yield 只是暂时中断函数。
  • 生成器函数不会立即执行,只有在调用 next() 函数时才会执行到 yield 语句,并返回结果。

总结

Python 中的 yield 是一个很有用的特殊关键字,可以将普通函数变成生成器函数,让我们能够更好地控制程序的流程并节约内存。其中,可以利用带参数的生成器函数,让我们更好地控制生成器对象的输出结果。在使用 yield 时,还需要注意一些细节问题,例如不能统一返回值、不能同时使用 yieldreturn 等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python yield 使用浅析 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 利用Python开发微信支付的注意事项

    利用Python开发微信支付的注意事项 微信支付是一种非常方便的支付方式,可以在移动端和PC端使用。在本攻略中,我们将介绍如何使用Python开发微信支付,并提供一些注意事项。 步骤1:注册微信支付 在使用微信支付之前,需要先注册微信支付。注册微信支付需要提供一些必要的信息,如商户号、API密钥等。注册完成后,可以在微信支付平台上创建应用,并获取应用的APP…

    python 2023年5月15日
    00
  • Python常见的几种数据加密方式

    Python常见的几种数据加密方式 数据加密是保护数据安全的重要手段。Python提供了多种加密方式,本文将介绍Python常见的几种数据加密方式,包括对称加密、非对称加密和哈希加密,并提供两个示例,分别演示如何使用Python实现对称加密和非对称加密。 对称加密 对称加密是指使用相同的密钥进行加密和解密的加密方式。常见的对称加密算法有DES、3DES、AE…

    python 2023年5月14日
    00
  • Python黑魔法库安装及操作字典示例详解

    Python黑魔法库安装及操作字典示例详解 什么是黑魔法库 黑魔法库(Magic Library)是指功能强大但难以理解和实现的代码库,一般具有以下几个特点: 高级功能:黑魔法库通常实现了某种领域的高级功能,能够在特定领域内大幅提升工作效率。 多样性:黑魔法库可以涵盖很多不同的领域,如爬虫、数据分析、文本处理、图像处理等等。 依赖复杂:大多数黑魔法库都依赖于…

    python 2023年5月13日
    00
  • python子线程如何有序执行

    要让Python子线程有序执行,可以使用以下方式: 1.使用threading模块的Lock()类来实现线程同步。在主线程中定义一个具有初始值的Lock对象,然后在子线程调用该锁进行同步。 示例代码: import threading def worker(lock, num): lock.acquire() print(f"Worker {num…

    python 2023年5月19日
    00
  • 跟老齐学Python之不要红头文件(2)

    下面我将详细讲解“跟老齐学Python之不要红头文件(2)”的完整攻略。 标题 背景 在Python脚本开发中,有些开发者需要添加一些头文件,或者称之为模块声明文件,以便在脚本中使用一些常见的模块。而在一些不同的场景下,这种做法会带来不同的问题。 问题 在一些脚本转换或者自动化测试工具中,识别头文件并不容易。因此,在代码的可维护性、可重用性、可测试性等方面,…

    python 2023年6月2日
    00
  • 详解Python利用random生成一个列表内的随机数

    关于“详解Python利用random生成一个列表内的随机数”的攻略,我可以给出以下几条说明: 1. 导入random模块 在Python中使用random模块来生成随机数,因此首先需要导入random模块。可以使用以下代码进行导入: import random 2. 利用random.randint()方法生成随机数 在Python中可以使用random.…

    python 2023年6月3日
    00
  • Python文件的应用之序列化与反序列化详解

    Python文件的应用之序列化与反序列化详解 什么是序列化? 序列化(Serialization)是指将对象的状态转换为可以存储或传输的形式的过程,通常将对象序列化为字节流或文本流的形式。在将对象传输或存储的时候,需要对其进行序列化,以便于传输或保存到磁盘中。在 Python 中,序列化的实现通常采用 pickle 模块。 序列化的基本使用 将对象序列化为字…

    python 2023年5月14日
    00
  • 用python的turtle模块实现给女票画个小心心

    下面是详细的“用Python的turtle模块实现给女票画个小心心”的攻略: 步骤1:导入turtle模块 在使用turtle模块之前,需要先导入它。代码如下: import turtle 步骤2:设置画布大小、背景色等信息 在进行图形绘制之前,需要设置画布的大小、背景色等绘图信息。示例代码如下: # 创建一个画布 canvas = turtle.Scree…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部