我遇到了迭代python中的callables列表的问题。应该在字符串生成器上调用callable。当前行为是列表中的最后一个可调用对象被调用的次数与列表中的可调用对象一样多。我目前的代码:
for m in list_of_callables:
strings = (m(s) for s in strings)
在上面的代码中,字符串最初是“Generator”类型。我也尝试了以下内容:
for i in range(len(list_of_callables)):
strings = (list__of_callables[i](s) for s in strings)
这也没有用,但是当我没有循环调用它们并简单地调用它们就可以正常工作了:
strings = (list_of_callables[0](s) for s in strings)
strings = (list_of_callables[1](s) for s in strings)
这对我来说似乎很奇怪,因为上面应该等同于for循环。
提前感谢您的帮助和建议:)。
答案 0 :(得分:3)
strings = (m(s) for s in strings)
这实际上并没有调用你的可调用对象。它创建了一个生成器表达式,稍后将调用m
,使用稍后发生的m
。
循环后,m
是最终可调用的。当您尝试从strings
检索元素时,所有嵌套的genexps都会查找m
来计算值,并且它们都会找到最后一个可调用的值。
您可以使用itertools.imap
代替genexp来解决此问题:
strings = itertools.imap(m, strings)