【问题标题】:Include the yield inside another function [duplicate]将收益包含在另一个函数中[重复]
【发布时间】:2019-04-12 21:44:27
【问题描述】:

我有两个函数,generatorA() 在里面调用generatorB()。我想在调用generatorB() 时获得所有收益,但我只得到0,1,2 如何获得0,1,2,3,4,5

generatorA() 是一个回调函数。所以我不能说,它什么时候会被调用。

def generatorA():
    mylist = range(4,6)
    for i in mylist:
        yield i


def generatorB():
    generatorA()

    mylist = range(3)
    for i in mylist:
        yield i

for i in generatorB():
    print(i)

【问题讨论】:

  • @schwobaseggl 我不知道为什么他们标记为重复。就我而言,我的函数是回调函数

标签: python iterator generator yield coroutine


【解决方案1】:

使用yield from:

def generatorA():
    return range(4,6)  

def generatorB():
    mylist = range(3)
    for i in mylist:
        yield i

    yield from generatorA()

for i in generatorB():
    print(i)

输出

0
1
2
4
5

【讨论】:

  • 如果生成器是回调函数怎么办。比我不知道它什么时候执行?难道我们不
【解决方案2】:

使用yield from,您可以通过可迭代解包进一步缩短它。

def generatorB():
    yield from (*range(3), *generatorA())

你可以对generatorA做同样的事情:

def generatorA():
    yield from range(4,6)

(...但我认为generatorA 是更复杂事物的替代品。)

>>> list(create())
[0, 1, 2, 4, 5]

【讨论】:

  • * in (*range(3), *generatorA()) 是什么意思
  • 如果生成器是回调函数怎么办。比我不知道它什么时候执行?难道我们不
  • @BalakrishnanSathiyakugan 这是可迭代解包的语法。另外,在这种情况下,您所说的回调是什么意思?为什么重要?
  • 我正在使用 keras 回调函数来获取每个 ephos 的准确性和损失。所以我使用 yield 和 ajax 调用将它更新到前端。
  • @BalakrishnanSathiyakugan 在这种情况下,您可能需要查看asyncio
猜你喜欢
  • 2016-09-30
  • 2013-03-07
  • 1970-01-01
  • 2021-03-26
  • 2013-02-14
  • 2010-10-17
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
相关资源
最近更新 更多