最简单的方法来调用项目列表上的一个函数

时间:2016-08-18 16:39:07

标签: python python-3.x iterator

在python 2中,我使用map将函数应用于多个项目,例如,删除与模式匹配的所有项目:

map(os.remove,glob.glob("*.pyc"))

当然我忽略os.remove的返回码,我只想删除所有文件。它创建了一个列表的临时实例,但它确实有效。

使用Python 3,因为map返回迭代器而不是列表,上面的代码什么都不做。 我找到了一种解决方法,因为os.remove返回None,我使用any强制完整列表上的迭代,而不创建list(更好的性能)

any(map(os.remove,glob.glob("*.pyc")))

但它似乎有点危险,特别是在将它应用于返回某些东西的方法时。另一种方法是使用单行而不创建不必要的列表?

1 个答案:

答案 0 :(得分:3)

map()(以及从2.7到3.x的许多其他函数)返回生成器而不是列表的更改是一种节省内存的技术。对于大多数情况,更正式地写出循环没有性能损失(它甚至可能是可读性的首选)。

我会提供一个例子,但@vaultah在评论中将其钉在了一起:仍然是一个单行:

for x in glob.glob("*.pyc"): os.remove(x)