【发布时间】:2022-03-17 06:04:48
【问题描述】:
这与以下内容有关:(在 Python 代码中)
for i in object:
doSomething(i)
对
map(doSomething, object)
两者都很容易理解,而且简短,但是有什么速度差异吗?现在,如果 doSomething 有一个返回值,我们需要检查它是否会作为 map 中的列表返回,并且在 for 循环中,我们可以创建自己的列表或一次检查一个。
for i in object:
returnValue = doSomething(i)
doSomethingWithReturnValue(returnValue)
对
returnValue = map(doSomething, object)
map(doSomethingWithReturnValue, returnValue)
现在,我觉得两者有点分歧。这两个 doSomethingWithReturnValue 函数可能会有所不同,具体取决于是在我们通过循环时动态检查它们还是在最后一次检查它们会产生不同的结果。此外,似乎 for 循环总是可以工作,可能会更慢,而地图只能在某些情况下工作。当然,我们可以通过扭曲来完成其中任何一项工作,但重点是避免这种类型的工作。
我正在寻找的是一个场景,与在性能、可读性、可维护性或实施速度方面做得好的 for 循环相比,映射函数真正大放异彩。如果答案是真的没有太大区别,那么我想知道人们在实践中何时使用其中一种,或者它是否真的完全任意并由编码标准设置,具体取决于您的机构。
谢谢!
【问题讨论】:
-
您可以使用列表/字典/集合理解或生成器而不是地图 - 取决于 doSomething() 的作用。
-
不要尝试初步调整性能。我总是会选择最好的可读选项。稍后的运行时将显示 showstopper 性能是否存在问题,并且您已提高速度或资源使用率。