在python 2中,我曾经map将函数应用于多个项目,例如,删除了所有与模式匹配的项目:
map
map(os.remove,glob.glob("*.pyc"))
当然,我忽略的返回码os.remove,我只想删除所有文件。它创建了一个列表的临时实例,但没有成功。
os.remove
使用Python 3时,map返回的是迭代器而不是列表,所以上面的代码什么都不做。我找到了一种解决方法,因为os.removereturns None,我用any它强制对整个列表进行迭代,而不用创建list(更好的性能)
None
any
list
any(map(os.remove,glob.glob("*.pyc")))
但这似乎有些危险,特别是将其应用于返回内容的方法时。使用单行代码而不创建不必要的列表的另一种方法?
map()返回生成器而不是列表的更改(以及从2.7到3.x的许多其他功能)是一种节省内存的技术。在大多数情况下,更正式地写出循环不会影响性能(出于可读性的考虑,它甚至是首选)。
map()
我将提供一个示例,但@vaultah在注释中将其固定:仍然是一线:
for x in glob.glob("*.pyc"): os.remove(x)