您的位置:首页 > 编程语言 > Python开发

[Python] 单次迭代带来的问题

2017-08-25 15:33 281 查看
 

在 Python 3.0 中,诸如内置函数map等函数返回一个单次可迭代对象。也就是说,其返回的迭代器是边获取下一个值,边遗忘前面迭代出来的值的。这点在实际代码中可能会带来意想不到的效果。

例如,我们看下面这段代码:
iter = map(ord, 'abc')
print(list(iter)) # => [97, 98, 99]
print(list(iter)) # => []

这里我们原本希望用 iter 迭代器每次都产生列表 [97, 98, 99],但实际上它被 list 第一次激活后就无法再从头迭代了。

为了处理这个问题,我们可以将 list 后的结果储存在一个变量里,随后反复使用;或者将产生迭代器的代码封装成函数,每次都使用一个新的迭代器。

# 1
iter = map(ord, 'abc')
L = list(iter)
print(L)
print(L)

#2
gen_iter = (lambda : map(ord, 'abc'))
print(list(gen_iter()))
print(list(gen_iter()))




 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: