在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")))
但它似乎有点危险,特别是在将它应用于返回某些东西的方法时。另一种方法是使用单行而不创建不必要的列表?
答案 0 :(得分:3)
从map()
(以及从2.7到3.x的许多其他函数)返回生成器而不是列表的更改是一种节省内存的技术。对于大多数情况,更正式地写出循环没有性能损失(它甚至可能是可读性的首选)。
我会提供一个例子,但@vaultah在评论中将其钉在了一起:仍然是一个单行:
for x in glob.glob("*.pyc"): os.remove(x)