小编典典

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

python

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

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

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

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

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

但这似乎有些危险,特别是将其应用于返回内容的方法时。使用单行代码而不创建不必要的列表的另一种方法?


阅读 185

收藏
2020-12-20

共1个答案

小编典典

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

我将提供一个示例,但@vaultah在注释中将其固定:仍然是一线:

for x in glob.glob("*.pyc"): os.remove(x)
2020-12-20