百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

DAY4-step9 Python的yield:yield和return的区别

itomcoil 2025-02-17 12:29 27 浏览

Python的yield是什么?

python中的yield关键字类似于return,区别在于yield不返回值,而是返回一个generator给调用方。

语法

yield expression

描述

Python yield返回一个generator 对象。 Generators 是特殊的函数,必须对其进行迭代才能获取值。

示例:Yield 方法

这是一个简单的yield示例。 函数testyield()的yield语句,参数为“ Welcome to Guru99 Python Tutorials”。 执行到yield函数时,会把输出送给generator对象,而不是返回实际值给调用者。

def testyield():
  yield "Welcome to Guru99 Python Tutorials"
output = testyield()
print(output)  

Output:

输出送给了generator对象,但是我们没有得到想要的输出!

要打印给出yield的消息,将必须迭代generator对象,如下例所示:

def testyield():
  yield "Welcome to Guru99 Python Tutorials"

output = testyield()
for i in output:
    print(i)

Output

Welcome to Guru99 Python Tutorials

Generators 是什么?

Generators是返回可迭代generator对象的函数。 一次获取一个generator对象,因此要获取实际值必须循环获取。

def testyield():
    yield "H"
    yield "E"
    yield "L"
    yield "L"
    yield "O"

test = testyield()
for i in test:
    print(i)

Output:

H
E
L
L
O

如何从generator读取值?

您可以使用list(),for循环和next()方法从generator对象读取值。

使用list()

列表是一个可迭代的对象,其元素放在方括号中。在generator对象上使用list()将提供generator持有的所有值。

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(list(num))

Output:

[0, 2, 4, 6, 8]

使用for循环

在示例中,有一个函数定义了even_numbers(),它将为您提供所定义n的所有偶数。 调用函数even_numbers()将返回一个generator对象,该对象在for循环内使用。

Example:

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

Output:

0
2
4
6
8

使用:next()

next()方法将为您提供列表,数组或对象中的下一项。 一旦列表为空next()将返回一个带有stopIteration信号的错误。

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))

Output:

0
2
4
6
8
Traceback (most recent call last):
  File "main.py", line 11, in 
    print(next(num))
StopIteration

generator是一次性使用

如果是generator,则只能使用一次。 如果尝试再次使用它们,它将为空。

示例

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

print("\n")
print("Calling the generator again: ", list(num))

Output:

0
2
4
6
8
Calling the generator again:  []

如果您希望再次使用输出,则必须再次调用该函数。

何时在Python中使用Yield而不是Return

Python3 Yield执行时,并没有立刻返回,而是将一个返回值送给generator函数,结束执行后,可以在调用者使用循环获取全部的返回值。

函数的return是函数执行的结束,并且将单个值返回给调用方。

在这种情况下,您应该使用Yield而不是Return

  • 当需要返回的数据量很大时,使用yield而不是return
  • 当您需要更快地返回大型数据集时,Yield是最佳选择

相关推荐

Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)

在开始本文之前提醒各位朋友,Python记得安装PyQt5库文件,Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放...

Connect 2.0来了,还有Nuke和Maya新集成

ftrackConnect2.0现在可以下载了--重新设计的桌面应用程序,使用户能够将ftrackStudio与创意应用程序集成,发布资产等。这个新版本的发布中还有两个Nuke和Maya新集成,...

Magicgui:不会GUI编程也能轻松构建Python GUI应用

什么是MagicguiMagicgui是一个Python库,它允许开发者仅凭简单的类型注解就能快速构建图形用户界面(GUI)应用程序。这个库基于Napari项目,利用了Python的强大类型系统,使得...

Python入坑系列:桌面GUI开发之Pyside6

阅读本章之后,你可以掌握这些内容:Pyside6的SignalsandSlots、Envents的作用,如何使用?PySide6的Window、DialogsandAlerts、Widgets...

Python入坑系列-一起认识Pyside6 designer可拖拽桌面GUI

通过本文章,你可以了解一下内容:如何安装和使用Pyside6designerdesigner有哪些的特性通过designer如何转成python代码以前以为Pyside6designer需要在下载...

pyside2的基础界面(pyside2显示图片)

今天我们来学习pyside2的基础界面没有安装过pyside2的小伙伴可以看主页代码效果...

Python GUI开发:打包PySide2应用(python 打包pyc)

之前的文章我们介绍了怎么使用PySide2来开发一个简单PythonGUI应用。这次我们来将上次完成的代码打包。我们使用pyinstaller。注意,pyinstaller默认会将所有安装的pack...

使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂

PySide2是Qt框架的Python绑定,允许你使用Python创建功能强大的跨平台GUI应用程序。PySide2的基本使用方法:安装PySide2pipinstallPy...

pycharm中conda解释器无法配置(pycharm安装的解释器不能用)

之前用的好好的pycharm正常配置解释器突然不能用了?可以显示有这个环境然后确认后可以conda正在配置解释器,但是进度条结束后还是不成功!!试过了pycharm重启,pycharm重装,anaco...

Conda使用指南:从基础操作到Llama-Factory大模型微调环境搭建

Conda虚拟环境在Linux下的全面使用指南:从基础操作到Llama-Factory大模型微调环境搭建在当今的AI开发与数据分析领域,conda虚拟环境已成为Linux系统下管理项目依赖的标配工具。...

Python操作系统资源管理与监控(python调用资源管理器)

在现代计算环境中,对操作系统资源的有效管理和监控是确保应用程序性能和系统稳定性的关键。Python凭借其丰富的标准库和第三方扩展,提供了强大的工具来实现这一目标。本文将探讨Python在操作系统资源管...

本地部署开源版Manus+DeepSeek创建自己的AI智能体

1、下载安装Anaconda,设置conda环境变量,并使用conda创建python3.12虚拟环境。2、从OpenManus仓库下载代码,并安装需要的依赖。3、使用Ollama加载本地DeepSe...

一文教会你,搭建AI模型训练与微调环境,包学会的!

一、硬件要求显卡配置:需要Nvidia显卡,至少配备8G显存,且专用显存与共享显存之和需大于20G。二、环境搭建步骤1.设置文件存储路径非系统盘存储:建议将非安装版的环境文件均存放在非系统盘(如E盘...

使用scikit-learn为PyTorch 模型进行超参数网格搜索

scikit-learn是Python中最好的机器学习库,而PyTorch又为我们构建模型提供了方便的操作,能否将它们的优点整合起来呢?在本文中,我们将介绍如何使用scikit-learn中的网格搜...

如何Keras自动编码器给极端罕见事件分类

全文共7940字,预计学习时长30分钟或更长本文将以一家造纸厂的生产为例,介绍如何使用自动编码器构建罕见事件分类器。现实生活中罕见事件的数据集:背景1.什么是极端罕见事件?在罕见事件问题中,数据集是...