代码之家  ›  专栏  ›  技术社区  ›  NeoVe

向python函数添加yield generator

  •  0
  • NeoVe  · 技术社区  · 6 年前

    我有这个问题陈述:

    为了获得最佳性能,应分批处理记录。 创建一个生成函数“batched”,它将生成1000个批次 一次记录,可使用如下:

      for subrange, batch in batched(records, size=1000):
          print("Processing records %d-%d" %(subrange[0], subrange[-1]))
          process(batch)
    

    我试过这样做:

    def myfunc(batched):
        for subrange, batch in batched(records, size=1000):
            print("Processing records %d-%d" %
            (subrange[0], subrange[-1]))
         yield(batched)
    

    但我不确定,因为我是Python生成器的新手,所以这只是在控制台上没有显示任何内容,没有错误,什么都没有,有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Aaron_ab    6 年前

    生成器是懒惰的,应该消耗或引导它来做一些事情。

    见例子:

    def g():
        print('hello world')
        yield 3
    
    x = g() # nothing is printed. Magic..
    

    应该这样做:

    x = g()
    x.send(None) # now will print
    

    或:

    x = g()
    x.next()
    

    [编辑]

    注意在做的时候 .next() 明确地说,最终你会 StopIteration 错误,所以您应该捕获或抑制它