Python中yield生成器与return返回值的区别解析

Ada
Ada
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析Python中yield与return的核心区别。yield不仅返回数据,还能保存函数执行状态并记住遍历位置,实现惰性求值;而return仅返回结果并终止函数。通过对比代码实例,展示两者在迭代处理中的不同行为,帮助开发者理解生成器的优势及适用场景。

Python迭代与迭代器基础

在Python中,迭代是访问集合元素最核心的功能之一,它提供了一种统一且高效的方式来遍历数据集合。

迭代器则是实现这一机制的关键对象,它能够记录当前遍历的具体位置,确保遍历过程有序进行。

迭代器从集合的第一个元素开始逐个访问,直至所有元素处理完毕。值得注意的是,迭代器的设计原则是单向的,即只能向前推进,不支持后退操作。

要创建和使用迭代器,主要依赖两个内置方法:iter()用于获取迭代器对象,next()用于获取下一个元素。

生成器是一种特殊的迭代器,它通过更简洁的语法实现了迭代逻辑,是Python中处理大规模数据或无限序列的高效工具。

生成器与yield的代码实现


def gen_yield():
  for i in range(1,10):
    for j in range(1,10):
      yield i+j
      # return i+j

if __name__ == '__main__':
  aa = gen_yield()
  print(aa.__next__())
  print(aa.__next__())
  print(aa.__next__())
  print(aa.__next__())
  print(aa.__next__())
  print(aa.__next__())

虽然yield和return都能用于返回值,但二者机制截然不同。yield在返回数据的同时,会暂停函数执行并保存当前的局部变量状态及迭代位置,下次调用时从中断处继续;而return在返回数据后直接终止函数,不保留任何状态。

若对上述理论区别仍存疑惑,可通过以下具体代码示例直观对比两者的行为差异。

yield与return的行为对比


def test_yield():
  for i in [1,2,3]:
    yield i
def test_return():
  for i in [1,2,4]:
    return i
if __name__ == '__main__':
  test_yield_obj = test_yield()
  print('这里测试yield')
  print(test_yield_obj.__next__())  # 1
  print(test_yield_obj.__next__())  # 2
  print(test_yield_obj.__next__())  # 3

  print('这里是测试return')
  print(test_return())  # 1
  print(test_return())  # 1
  print(test_return())  # 1

本文旨在通过实例帮助读者掌握yield与return的使用场景,如有更多技术疑问,欢迎持续关注本站获取最新技术分享。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。