代码之家  ›  专栏  ›  技术社区  ›  Fire Crow

作业的收益是什么?myVar=(收益率)

  •  29
  • Fire Crow  · 技术社区  · 16 年前

    this question

    但是,当收益率位于任务的右侧时,它会做什么呢?

    @coroutine
    def protocol(target=None):
       while True:
           c = (yield)
    
    def coroutine(func):
        def start(*args,**kwargs):
            cr = func(*args,**kwargs)
            cr.next()
            return cr 
        return start
    

    我在示例代码中遇到了这个 this blog

    2 回复  |  直到 9 年前
        1
  •  38
  •   Tendayi Mawushe    15 年前

    yield 函数中使用的语句将该函数转换为“生成器”(创建迭代器的函数)。生成的迭代器通常通过调用 next() . 但是,可以通过调用方法向函数发送值 send() 而不是 下一个() 要恢复它:

    cr.send(1)
    

    1 到 c

    cr.next() 实际上相当于 cr.send(None)

        2
  •  12
  •   dusan    16 年前

    可以使用将值发送到生成器 send 功能。

    如果您执行:

    p = protocol()
    p.next() # advance to the yield statement, otherwise I can't call send
    p.send(5)
    

    yield 将返回5,因此在发电机内部 c 五岁。

    还有,如果你打电话 p.next() , 产量 会回来的 None

    你可以找到更多信息 here

        3
  •  0
  •   Community Mohan Dere    6 年前
    • yield 根据生成器函数中定义的逻辑返回数据流。
    • 但是,发送(val)是从发电机功能外部传递所需值的一种方式。

    p、 next()在python3中不起作用,next(p)在python2,3中都起作用(内置)

    p、 next()不适用于Python3,给出了以下错误,但是它仍然适用于Python2。

    Error: 'generator' object has no attribute 'next'
    

    def fun(li):
      if len(li):
        val = yield len(li)
        print(val)
        yield None
        
    
    g = fun([1,2,3,4,5,6])
    next(g) # len(li) i.e. 6 is assigned to val
    g.send(8) #  8 is assigned to val