Python yield 使用浅析

yizhihongxing

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日

相关文章

  • python3整数反转的实现方法

    下面是关于“Python3整数反转的实现方法”的完整攻略: 一、需求分析 需要实现将一个整数进行反转的功能,即将输入的整数按照位数反过来。例如,输入123,输出321。 二、解决方案 方法一:利用字符串反转 def reverse_num(num: int) -> int: if num < 0: return -reverse_num(-num…

    python 2023年6月5日
    00
  • Python正则表达式基本原理

    Python正则表达式基本原理 正则表达式是一种用于描述字符串模式的语言,它可以用于匹配、查找、替换和割字符串。Python中的re模块提供正则表达式的支持,方便进行字符串的处理。本文将详细讲解Python正则表达式的基本原理,包正则表达式法、re块的常用函数以及两个常用的匹配实例。 正则表达式语法 正则表达式由一些特殊字符和普通字符组成,用于字符串模式。下…

    python 2023年5月14日
    00
  • 讲解python参数和作用域的使用

    讲解Python参数和作用域的使用需要从函数定义、函数参数及作用域三个方面来讲解。 函数定义 在Python中,我们通过def关键字定义函数。函数定义包括函数名称和参数列表,语法形式如下: def function_name(parameter1, parameter2, …, parameterN): statement(s) 其中,parameter…

    python 2023年5月13日
    00
  • Python中threading.Timer()定时器实现定时任务

    请看下面的完整攻略: 1. 什么是定时器 在Python中,可以使用time模块实现定时器功能,但是这种方式并不优雅且不易维护。所以Python提供了threading.Timer()方法来实现定时器功能,该方法能够在一定的时间间隔之后自动执行指定的函数。 2. Timer方法的语法 threading.Timer()方法的语法如下: Timer(inter…

    python 2023年5月19日
    00
  • Python区块链交易类教程

    Python区块链交易类教程 什么是区块链交易? 区块链交易是指基于区块链技术的交易操作。区块链技术是一种去中心化的技术,其主要特点是透明性、不可篡改性、去中心化和匿名性。区块链技术应用到交易领域之后,可以极大地提高交易的安全性和公正性,避免交易被篡改或者被中介机构控制的情况发生。 区块链交易类库 在Python语言中,有很多的区块链交易类库可以使用,例如p…

    python 2023年6月3日
    00
  • Python3中的bytes和str类型详解

    Python3中的bytes和str类型详解 在Python3中,bytes和str类型都是用来存储数据的,但是它们之间有很大的区别。在这篇攻略中,我们将详细讲解bytes和str类型的不同之处,以及如何在它们之间进行转换。 1. str类型 str类型是Python3中最基本的字符串类型,用于存储Unicode编码的字符串。我们可以通过以下方式来创建一个s…

    python 2023年5月31日
    00
  • 移除切比雪夫多项式小拖尾系数的Python程序

    移除切比雪夫多项式小拖尾系数的过程,通常被称为切比雪夫多项式带通滤波。这个过程可以通过一系列的数学公式和操作完成。在Python中,我们可以用一些库和函数来实现这个过程。以下是一种比较完整的Python程序,它可以用来移除切比雪夫多项式小拖尾系数: 导入所需库 import scipy.signal as signalimport numpy as np 配…

    python-answer 2023年3月25日
    00
  • Python语法快速入门指南

    Python语法快速入门指南 简介 本指南旨在帮助初学者快速了解Python语言的基础语法,并提供一些常用的语法和操作的示例说明。 数据类型 数字类型 Python支持三种数字类型:整数(int)、浮点数(float)和复数(complex)。 # 整数 a = 10 b = -20 # 浮点数 c = 3.1415926 d = -0.618 # 复数 e…

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