Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >yield关键字

yield关键字

作者头像
TomatoCool
发布于 2023-07-30 09:43:52
发布于 2023-07-30 09:43:52
18600
代码可运行
举报
文章被收录于专栏:TomatoCoolTomatoCool
运行总次数:0
代码可运行

在一个函数内实用yield关键字将函数变成生成器。

一个简单的例子:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  一个迭代器函数
def fun(n):
    for i in range(n):
        yield i
        print('--分割线--')

#  获取迭代器
a = fun(5)
#  使用next让迭代器继续执行
print(next(a))
print(next(a))
print(a.__next__())
print(a.__next__())

解释:

  1. 定义一个生成器a,运行完第三行停止
  2. 第一个next函数执行,接收第一个i,此时i=0,输出0,第三行后的代码不执行
  3. 第二个next函数执行,从第四行执行代码,输出分割线后,进入下一个for循环,接收第二个i,此时i=1,输出1,第三行后的代码不执行
  4. 第三个next方法执行,从第四行执行代码,输出分割线后,进入下一个for循环,接收第二个i,此时i=2,输出2,第三行后的代码不执行

抽象解释: 将yield看成两个部分,一:return i,二:一个锁,每次执行next函数后,程序运行在一和二之间。下一次调用next函数先开第二部分的锁,输出分割线后进入一个新的循环,再return一个新的i,被新的锁锁住。(第一次相当于没有锁,直接return后再被锁)

tip:next函数和__next__()方法效果相同

关闭生成器:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  关闭后无法用next进行迭代(用的少)
a.close()
向生成器发送数据:

改一下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  一个迭代器函数
def fun(n):
    for i in range(n):
        k = yield i
        if k:
            print(k)
        print('--分割线--')

#  获取迭代器
a = fun(5)
print(next(a))
#  发送一个字符
print(a.send('a'))
print(a.__next__())
print(a.__next__())

可以看到a被输出了,不影响其他代码运行(send后同样进行一次迭代,结果和next相同)

传入一个异常:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  此时生成器会抛出一个错误(可以用try语句接收)
a.throw(Exception)

#  一般这样接收
try:
    yield 1
except Exception:
    yield 'Exception'
finally:
    print('finally')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023 年 05 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何理解python中的yield,看完还是不懂?我手把手教你
关于yield 看了忘,忘了看,零零散散的总是理解不透彻。今天彻底记录下,带大家一探 yield到底是什么?
胡八万
2022/06/08
7640
如何理解python中的yield,看完还是不懂?我手把手教你
Python-yield关键字详解
yield这个关键字很早的时候就了解过,但一直都只了解其基本使用,即转变函数为生成器的使用,节省大型迭代时的内存空间,但其实yield在python的很多特性中都起着重要的作用
Kevinello
2022/08/19
6000
Python-yield关键字详解
Python中的 yield 和 return 混用引发的思考
根据编码经验分割线的上下输出都会是 0~9 ,但实际情况是分割线上面输出结果为空下面输出结果为0~9
用户4945346
2024/04/17
4330
Python中的 yield 和 return 混用引发的思考
Python生成器实现及yield关键字
利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。也就是说在迭代的时候生成数据,边迭代边生成。
Python碎片公众号
2021/02/26
3690
Python生成器实现及yield关键字
yield from 关键字的 return 语句
我经常需要写一些比较复杂的代码,常常会遇到各种各样的问题。比如我在使用yield from 表达式时,return 语句的问题。我们知道,在使用 yield from 表达式时,return 语句的作用是在子生成器(被调用的生成器)执行完毕后,返回最终的结果到调用者。这可以让生成器在嵌套结构中更清晰地传递值。具体情况我会一一用文字记录下来,方便后期参考:
华科云商小徐
2024/02/06
1260
深度详解 Python yield与实现
学Python最简单的方法是什么?推荐阅读:Python开发工程师成长魔法 Python yield与实现 yield的功能类似于return,但是不同之处在于它返回的是生成器。 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器)。 如果一个函数包含yield关键字,这个函数就会变为一个生成器。 生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。 由于生成器也是一个迭代器,那
小小科
2018/05/04
2.7K0
深度详解 Python yield与实现
python3--迭代器,生成器
现在是从结果分析原因,能被for循环的就是"可迭代的",但是如果按常规想,for怎么知道谁是可迭代的呢?
py3study
2018/08/02
4740
php yield关键字以及协程的实现
php的yield是在php5.5版本就出来了,而在初级php界却很少有人提起,我就说说个人对php yield的理解
仙士可
2019/12/19
1.5K2
php yield关键字以及协程的实现
yield关键字:听叔一句劝,这里的水很深,你可得把握住!
最近两天因为一些原因小阿巩竟然咕咕咕了(呵,女人),具体原因先卖个关子,之后会水篇文和大伙分享。yield也是面试中常考的知识点,关于yield或者说关于python的生成器你真的了解吗?yield关键字到底返回了什么?在python中底层又是如何实现的呢?今天阿巩将从python源码出发和大家分享下这个神秘的关键字。日拱一卒,让我们开始吧!
才浅Coding攻略
2022/12/12
4730
yield关键字:听叔一句劝,这里的水很深,你可得把握住!
Python中的yield关键字
在Python中,yield是一个重要的关键字,它与生成器和懒惰计算密切相关。
雷子
2023/11/27
3300
Python中的yield关键字
Python yield关键字 和 Generator(生成器)
Generators functions allow you to declare a function that behaves like an iterator, i.e. it can be used in a for loop. https://wiki.python.org/moin/Generators 翻译:生成器功能允许你声明一个行为类似于迭代器的函数,它也能用在for循环中。 Python Yield关键字 yield关键字类似于return,不同之处在于Python的
Steve Wang
2018/02/05
1.1K0
Python中的yield关键字是什么?
在Python中,yield是一个重要的关键字,它与生成器(Generator)和懒惰计算(Lazy Evaluation)密切相关。
闻说社
2024/07/08
2510
Python中的yield关键字是什么?
探索 yield 关键字
「yield」关键字是 C# 中的一种语言特性,用于在枚举器中简化迭代器的实现。它使得开发人员可以通过定义自己的迭代器来简化代码,而不必手动实现 IEnumerable 和 IEnumerator 接口。
Niuery Diary
2023/10/22
2060
探索 yield 关键字
python3 基础(4)-装饰器、生成
def bar(): print("in the bar") #函数bar()在以下三处位置,只有1、2处时,调用foo()才正确执行 ------------------------------ #1# def foo(): print("in teh foo")    bar() #2# foo() #3#
py3study
2020/01/03
4530
python3 基础(4)-装饰器、生成
面试题-python 什么是生成器(generator)?
在 Python 中,带有 yield 的函数在 Python 中被称之为 generator(生成器)。 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
上海-悠悠
2021/03/19
1K0
老男孩Python全栈开发(92天全)视频教程 自学笔记17
day17课程内容:   装饰器回顾练习 登录功能: #登录京东,不同的页面,选择页面,然后不同的登录方式 with open('作业5.1jingdong','w',encoding='utf8') as f1,open('作业5.2weixin','w',encoding='utf8') as f2: jingdong={'username':'张三','pwd':'1234'} weixin={'username':'张三微信','pwd':'4321'} f1.write(
玩蛇的胖纸
2018/06/08
4440
Python迭代器、生成器和修饰器-你会用yield吗?
yield 英 [jiːld] 美 [jiːld] v.出产(作物);产生(收益、效益等);提供;屈服;让步;放弃;缴出 n.产量;产出;利润 上面路牌是「让」的意思
唔仄lo咚锵
2021/09/14
5580
Python迭代器、生成器和修饰器-你会用yield吗?
迭代器和生成器
Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。
全栈程序员站长
2022/07/21
4840
Python的yield关键字
yiele关键字是什么?他是一个类似return的关键字,函数中带有该关键字时就表示是一个生成器,而不在表示一个函数了,该生成器自带一些函数比如next(),send()等。你可以先把它看成return。不过他和return的区别在于return执行完毕后就结束了,即停止。而yield执行完毕后只是暂停了,后续还可以继续使用send()来运行。如果听不懂,就先把yield当作trturn来理解。我们通过代码来理解会更好一点。 第一个列子:
Tommonkey
2023/02/25
3980
Python的yield关键字
python中yield\\send好处
生成器yield\send 生成器的好处:缓解内存压力 # -*-coding:utf-8 -*- __date__ = '2018/3/9 ' __author__ = 'xiaojiaxin' __file_name__ = '生成器' # a1=[x for x in range(5000000000)] #将range(5000000000)全部扔进内存,速度非常慢,甚至会死机 a=(x for x in range(5)) print(a) # <generator object <genexp
IT架构圈
2018/06/01
8120
相关推荐
如何理解python中的yield,看完还是不懂?我手把手教你
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验