首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >直到得到所有需要的值,有没有办法让切片变得懒惰?

直到得到所有需要的值,有没有办法让切片变得懒惰?
EN

Stack Overflow用户
提问于 2010-07-24 19:42:23
回答 4查看 551关注 0票数 3

当生成器没有完成值并且所有需要的结果都被读取时,有没有办法停止让步?我的意思是生成器在不做StopIteration的情况下给出值。

例如,这永远不会停止:(修订)

代码语言:javascript
运行
复制
from random import randint
def devtrue():
    while True:
        yield True

answers=[False for _ in range(randint(100,100000))]
answers[::randint(3,19)]=devtrue()
print answers

我找到了这段代码,但还不明白如何在这种情况下应用它:http://code.activestate.com/recipes/576585-lazy-recursive-generator-function/

EN

Stack Overflow用户

发布于 2010-07-25 15:29:21

与Haskell中的take函数类似,您可以基于另一个生成器构建一个“有限的”生成器:

代码语言:javascript
运行
复制
def take(n,gen):
    '''borrowed concept from functional languages'''
togo=n
while togo > 0:
    yield gen.next()
    togo = togo - 1

def naturalnumbers():
    ''' an unlimited series of numbers '''
    i=0
    while True:
        yield i
        i=i+1

for n in take(10, naturalnumbers() ):
   print n

你可以用一个“直到”生成器,一个"while",...

代码语言:javascript
运行
复制
def gen_until( condition, gen ):
   g=gen.next()
   while( not condition(g) ):
      yield g
      g=gen.next()

并像这样使用它

代码语言:javascript
运行
复制
for i in gen_until( lambda x: x*x>100, naturalnumbers() ):
  print i

..。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3324947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档