首页 > 其他分享 >yield 和 yield from

yield 和 yield from

时间:2023-07-28 15:44:26浏览次数:34  
标签:g2 g1 iter yield dit out

在测试的时候,发现了一段挺有意思的 code block.

def g2(iter):
	yield from iter

def g1(iter):
	yield iter
 
def out(ar):
    for i in ar:
        print(i)

dit= {
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5,
}

out(g1(dit))
out(g2(dit))
out(g2(g1(dit)))
print(next(g2(g1(dit))))

# 输出如下:
# {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
# a
# b
# c
# d
# e
# {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
# {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

在这段代码片段中,有意思的是 g2(g1()) 中:

g1 返回一个 generator 对象;
g2 迭代 g1 的 generator 对象,最后返回原来的值,可以使用 next() 获取 generator 对象的下一个值。

标签:g2,g1,iter,yield,dit,out
From: https://www.cnblogs.com/fires/p/17587772.html

相关文章

  • 生成器/range/yield/模块
    生成器对象(自定义迭代器) 本质其实还是迭代器只不过是我们自己通过写代码产生 也是有__iter__和__next__方法 defindex():print('你还记得我吗?')yield123'''生成器对象也是节省存储空间的特性与迭代器对象一致'''"""当函数体代码中含有yield关键字......
  • 关于 yield 关键字(C#)
    阅读目录〇、前言一、yield关键字的使用1.1yieldreturn:在迭代中一个一个返回待处理的值1.2yieldbreak:标识迭代中断1.3返回类型为IAsyncEnumerable的异步迭代器1.4迭代器的返回类型可以是IEnumerator或IEnumerator1.5不能使用yield的情况二、使用yie......
  • 解读 ---- yield 关键字
    合集-c#基础(6) 1.编码技巧---如何实现字符串运算表达式的计算07-122.编码技巧---同步锁对象的选定07-133.解读---yield关键字07-174.并发编程---信号量线程同步07-185.并发编程---为何要线程池化07-186.编码技巧---谨防闭包陷阱07-19收起 引言yie......
  • Python: Yield & With/As
    Howtouseyield:https://www.runoob.com/w3cnote/python-yield-used-analysis.htmlHowtousewith/ashttps://www.jianshu.com/p/c00df845323c......
  • Python | yield关键字详解
    yield关键字的说明yield是Python中的一个关键字,它通常与生成器函数一起使用。yield就是保存当前程序执行状态。你用for循环的时候,每次取一个元素的时候就会计算一次。用yield的函数叫generator,和iterator一样,它的好处是不用一次计算所有元素,而是用一次算一次,可以节省......
  • Thread类中的常用线程调度方法sleep、yield、join
    sleepsleep方法是在Thread类中的一个静态方法,当一个线程调用了sleep方法,被调用的那个线程就会暂时的让出指定时间的CPU执行权,在这段时间也不会参与CPU的调度,当时间到了之后,就会重新回到就绪状态,等待CPU的再次调度,注意是就绪状态,而不是重新拿回CPU的执行权。并且,在休眠期间,只是会......
  • 三秒看懂Python yield
    业务场景:一个FastAPI构建的网关,数据进来时立即给予一次响应,表示:“收到,我已开始执行。”,然后分发任务另起一个线程异步执行。原本代码写的在异步里又起了一个异步等任务执行,这样不影响下面的return立刻响应。逻辑看起很繁琐,那有没有办法,能让函数在"return":“收到”之后,继续执行呢?......
  • python 生成器 yield
    生成器属于迭代器https://mp.weixin.qq.com/s/F3GLVY2EUpISpt_koCDmWg生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方......
  • 探秘C#中的yield关键字
    在"C#中,什么时候用yieldreturn"中,我们了解到:使用yieldreturn返回集合,不是一次性加载到内存中,而是客户端每调用一次就返回一个集合元素,是一种"按需供给"。本篇来重温yieldreturn的用法,探秘yield背后的故事并自定义一个能达到yieldreturn相同效果的类,最后体验yieldbreak的用法......
  • C# 中的yield return机制和原理
    前言#    当我们编写C#代码时,经常需要处理大量的数据集合。在传统的方式中,我们往往需要先将整个数据集合加载到内存中,然后再进行操作。但是如果数据集合非常大,这种方式就会导致内存占用过高,甚至可能导致程序崩溃。    C#中的yieldreturn机制可以帮助我们解决这个问......