python - 在项目列表上调用一个函数的最干净的方法

标签 python python-3.x iterator

在 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/

相关文章:

python - 表示 3D 多面体的库

python - 在Python/matplotlib中绘制具有足够刻度空间的点图?

python - 在 Linux 上使用 Python 进行视频捕获的最佳库是什么?

python - 为什么使用十进制值的指数表示法会失败?

python - Beautifulsoup 过滤器结果在 "for i"循环中引发 KeyError

python-3.x - OpenCV,如何将参数传递给 cv2.TrackerMedianFlow_create 函数?

C++ vector 迭代器 + 偏移量超出范围

c# - IEnumerator 或 IEnumerable 中的“产量”?

python-3.x - Spyder 无法识别我的库,ImportError : No module named 'numdifftools'

python - zip 生成器从元组列表传递参数