PEP 279 -- The enumerate() built-in function(http://www.python.org/dev/peps/pep-0279/)给出了enumerate()的源码如下:
def enumerate(collection):
'Generates an indexed series: (0,coll[0]), (1,coll[1]) ...'
i = 0
it = iter(collection)
while 1:
yield (i, it.next())
i += 1
我有个疑问:
enumerate内有一个死循环,it.next() 遍历迭代器最终会抛出一个StopIteration异常(红色代码,yield语句)。
但是经过测试发现却没有出现这个异常。
测试代码:
for i, v in enumerate('string'):
print i, v
感觉很奇怪。 于是我猜测是由于yield在捕获到it.next()StopIteration异常后终止了enumerate()生成器。在Pythoner QQ群(103441184)和hzx讨论后,他给出了一段测试代码,更加肯定了我的猜测是正确的。
hzx给出的测试代码:
def test3(n):
if n>3:
raise StopIteration;
else:
return n
def test():
i = 0
while 1:
yield (i, test3(i))
i += 1
for i1,i2 in test():
print i1,i2
最终得出结论:在生成器中yield语句遇到StopItertion异常后会终止生成器。
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢