以下 2 个代码片段 (A & B) 都返回 2 个字典的交集。
以下两个代码片段都应在 O(n) 中运行并输出相同的结果。然而,pythonic 的代码片段 B 似乎运行得更快。 这些代码片段来自 Python Cookbook。
代码片段 A:
def simpleway():
result = []
for k in to500.keys():
if evens.has_key(k):
result.append(k)
return result
代码片段 B:
def pythonicsimpleway():
return [k for k in to500 if k in evens]
一些设置逻辑和用于为这两个功能计时的功能 =>
to500 = {}
for i in range(500): to500[i] = 1
evens = {}
for i in range(0,1000,2): evens[i] = 1
def timeo(fun, n=1000):
def void(): pass
start = time.clock()
for i in range(n): void()
stend = time.clock()
overhead = stend - start
start = time.clock()
for i in range(n): fun()
stend = time.clock()
thetime = stend - start
return fun.__name__, thetime - overhead
使用 Python 2.7.5,使用 2.3 Ghz Ivy Bridge 四核处理器 (OS X 10.8.4)
我明白了
>>> timeo(simpleway)
('simpleway', 0.08928500000000028)
>>> timeo(pythonicsimpleway)
('pythonicsimpleway', 0.04579400000000078)