问题实际上是标题所说的.
的原因的问题:
在mapFUNC比较慢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)
Run Code Online (Sandbox Code Playgroud)
输出(Windows 7(64位)I-3 2nd gen):
>>>
3.4691164256
3.5064888507
Run Code Online (Sandbox Code Playgroud)
输出(Windows 7(32位)core2duo):
>>>
5.58571625252
6.25803459664
Run Code Online (Sandbox Code Playgroud)
我想我应该提到我使用的是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
'''
Run Code Online (Sandbox Code Playgroud)
输出(Windows 7(32位)core2duo):
>>>
31.0213507144
29.7194933508
Run Code Online (Sandbox Code Playgroud)