问题实际上是标题所说的。
问题的原因:map
func 比for
下面代码中的循环慢。
是因为我的代码有问题,还是有其他原因?
代码:
import timeit
setup = '''
def translate(x):
x[1]+=1
x[2]+=1
x[3]+=1
atoms = [[1,1,1,1]]*1000
'''
smt1 = '''for i in atoms: translate(i)'''
smt2 = '''map(translate, atoms)'''
time_for = timeit.Timer(setup=setup, stmt=smt1)
time_map = timeit.Timer(setup=setup, stmt=smt2)
print time_for.timeit(10000)
print time_map.timeit(10000)
输出(Windows 7(64 位)I-3 第二代):
>>>
3.4691164256
3.5064888507
输出(Windows 7(32 位)core2duo):
>>>
5.58571625252
6.25803459664
我想我应该提到我使用的是 Python 2.7.3,所以虽然map
在 Python 3 中是一个生成器,但在 Python 2 中却不是这样,所以这个“问题”不能在 Python 3 上复制。
更新:
为了解决那些说原子应该是不可变的,这里有一个不同版本的设置(它更慢,但仍然显示出差异):
setup = '''
def translate(x):
return tuple(i+1 for i in x)
atoms = [(1,1,1,1)]*1000
'''
输出(Windows 7(32 位)core2duo):
>>>
31.0213507144
29.7194933508