在 python 2 中,我使用 map
将函数应用于多个项目,例如,删除所有匹配模式的项目:
map(os.remove,glob.glob("*.pyc"))
当然我忽略了os.remove
的返回码,我只想删除所有文件。它免费创建了一个列表的临时实例,但它起作用了。
在 Python 3 中,map
返回一个迭代器而不是一个列表,上面的代码什么都不做。
我找到了一个解决方法,因为 os.remove
返回 None
,我使用 any
强制对完整列表进行迭代,而不创建 列表
(更好的性能)
any(map(os.remove,glob.glob("*.pyc")))
但这似乎有点危险,特别是在将其应用于返回某些内容的方法时。另一种使用单行代码而不创建不必要列表的方法?
最佳答案
map()
(以及从 2.7 到 3.x 的许多其他函数)返回生成器而不是列表的变化是一种内存节省技术。在大多数情况下,更正式地编写循环不会造成性能损失(为了可读性,它甚至可能是首选)。
我会提供一个示例,但@vaultah 在评论中指出了它:仍然是单行代码:
for x in glob.glob("*.pyc"): os.remove(x)
关于python - 在项目列表上调用一个函数的最干净的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39023423/