python输入q停止循环_python在一个循环中产生和停止迭代?

这里有一段代码,其中不需要使用StopIteration,中断就足够了:li = [12,51,98,4,36,99,33,1,125,78,9,369,48,47,214,4]

def gen( cont, header='something', footer='anything' ):

yield header

for x in cont:

if x<100:

yield x

else:

yield footer

break

for y in gen(li):

print '1 or 2 digits only:',y

结果1 or 2 digits only: something

1 or 2 digits only: 12

1 or 2 digits only: 51

1 or 2 digits only: 98

1 or 2 digits only: 4

1 or 2 digits only: 36

1 or 2 digits only: 99

1 or 2 digits only: 33

1 or 2 digits only: 1

1 or 2 digits only: anything

现在,这里有一个相当复杂的代码,在我看来,如果不使用StopIteration,我们是做不到的。你对此感兴趣吗?import Queue

q = Queue.Queue()

li = [12,51,98,4,36,99,33,1,125,78,9,369,48,47,214,4]

def gen( cont, header='something', footer='anything' ):

def qput(ili = [0]):

eli = li[ili[0]]

q.put(eli)

ili[0] = ili[0] + 1

return eli

qput()

qput()

qput()

qput()

qput()

yield header

while True:

try:

print '\nq.qsize() first is %s' % q.qsize()

el = q.get(None)

if el>9:

print 'el==',el

yield 1000+el

qput()

else:

print 'el==%s el//3==%s' % (el,el//3)

print 'there are %s items in q and q is emptied %s times :' % (q.qsize(),el//3)

for emp in xrange(el//3):

print '%s is removed from q' % q.get(None)

if q.qsize()==0 and emp

print 'ah !! q is now completely empty, no more emptying is possible !'

print 'q.qsize() second is %s' % q.qsize()

except Queue.Empty:

yield footer

raise StopIteration

print 'li == %s\n' % li

for i,nb in enumerate(gen(li)):

print ' * obtained from enumerate(gen(li)) : %s - %s' % (i,nb)

结果li == [12, 51, 98, 4, 36, 99, 33, 1, 125, 78, 9, 369, 48, 47, 214, 4]

* obtained from enumerate(gen(li)) : 0 - something

q.qsize() first is 5

el== 12

* obtained from enumerate(gen(li)) : 1 - 1012

q.qsize() second is 5

q.qsize() first is 5

el== 51

* obtained from enumerate(gen(li)) : 2 - 1051

q.qsize() second is 5

q.qsize() first is 5

el== 98

* obtained from enumerate(gen(li)) : 3 - 1098

q.qsize() second is 5

q.qsize() first is 5

el==4 el//3==1

there are 4 items in q and q is emptied 1 times :

36 is removed from q

q.qsize() second is 3

q.qsize() first is 3

el== 99

* obtained from enumerate(gen(li)) : 4 - 1099

q.qsize() second is 3

q.qsize() first is 3

el== 33

* obtained from enumerate(gen(li)) : 5 - 1033

q.qsize() second is 3

q.qsize() first is 3

el==1 el//3==0

there are 2 items in q and q is emptied 0 times :

q.qsize() second is 2

q.qsize() first is 2

el== 125

* obtained from enumerate(gen(li)) : 6 - 1125

q.qsize() second is 2

q.qsize() first is 2

el== 78

* obtained from enumerate(gen(li)) : 7 - 1078

q.qsize() second is 2

q.qsize() first is 2

el==9 el//3==3

there are 1 items in q and q is emptied 3 times :

369 is removed from q

ah !! q is now completely empty, no more emptying is possible !

* obtained from enumerate(gen(li)) : 8 - anything

请注意,此程序仅在q.get(None)下正确运行,而不是q.get()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值