在 python 中尝试函数式编程时,我注意到两个表达式之间的差异,我认为应该有相同的结果。
特别是我想要的是拥有一个包含(或者我应该说产量?)其他可迭代的迭代。我想要做的一个简单的例子可能是:
import itertools as itr
itr.repeat(itr.repeat(1,5),3)
这是一个由 3 个可迭代对象组成的可迭代对象,它们本身由数字 1 的 5 次出现组成。然而,这不是发生的情况。我得到的是(翻译成列表)是:
[[1,1,1,1,1],[],[]]
也就是说,最里面的迭代没有被复制(看起来),而是一次又一次地使用相同的迭代,导致它的元素用完。
使用地图的一个版本是:
import itertools as itr
map(lambda x: itr.repeat(1,5), range(3))
这产生了我期望的结果:
[[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]]
我不明白为什么会这样,而仅使用 repeat 的方法却不行。也许这与在地图版本中,来自的可迭代对象被包装在 lambda 中这一事实有关repeat
,但这应该有所作为吗?据我所知,lambda x: itr.repeat(1,5)
和之间的唯一区别itr.repeat(1,5)
是第一个接受参数(然后丢弃),而另一个没有。