Python:多任务与个人分配速度
我一直在寻找挤出我的代码更多的性能; 最近,在浏览这个Python维基页面时,我发现这个说法:
多个分配比个别分配慢。 例如“x,y = a,b”比“x = a; y = b”慢。
好奇,我测试了它(在Python 2.7上):
$ python -m timeit "x, y = 1.2, -1.4"
10000000 loops, best of 3: 0.0365 usec per loop
$ python -m timeit "x = 1.2" "y = -1.4"
10000000 loops, best of 3: 0.0542 usec per loop
我以不同的顺序重复了几次,但是多次赋值片段的执行效率至少比单个赋值要好30%。 显然,我的代码中涉及变量赋值的部分不会成为任何重大瓶颈的来源,但我的好奇心仍然被激怒了。 为什么多文档分配显然比个人分配的速度快,文档中另有说明?
编辑:
我测试了两个以上变量的赋值,并得到以下结果:
这一趋势似乎或多或少一致; 任何人都可以重现它吗?
(CPU:Intel Core i7 @ 2.20GHz)
有趣的是,它可能在一定程度上取决于CPU。 这些都是64位的Linux机器(相同的Python版本)。
Intel(R)Core(TM)2 Duo CPU T7300 @ 2.00GHz的结果
$ python -V
Python 2.7.5+
$ python -m timeit "x, y = 1.2, -1.4"
10000000 loops, best of 3: 0.0554 usec per loop
$ python -m timeit "x = 1.2" "y = -1.4"
10000000 loops, best of 3: 0.0349 usec per loop
英特尔(R)奔腾(R)CPU G850 @ 2.90GHz的结果
$ python -V
Python 2.7.5+
$ python -m timeit "x, y = 1.2, -1.4"
10000000 loops, best of 3: 0.0245 usec per loop
$ python -m timeit "x = 1.2" "y = -1.4"
10000000 loops, best of 3: 0.0394 usec per loop
最好看一下python的dis
模块。 其中反汇编字节码。 该测试显示了两个变量分配:
import dis
def single_assignment():
x = 1
y = 2
def multiple_assignment():
x, y = 1, 2
print dis.dis(single_assignment)
print dis.dis(multiple_assignment)
字节码:
4 0 LOAD_CONST 1 (1)
3 STORE_FAST 0 (x)
5 6 LOAD_CONST 2 (2)
9 STORE_FAST 1 (y)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
None
8 0 LOAD_CONST 3 ((1, 2))
3 UNPACK_SEQUENCE 2
6 STORE_FAST 0 (x)
9 STORE_FAST 1 (y)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
None
它看起来在2个变量的情况下所需的字节码数量是相同的。 如果有3个或更多的变量赋值,则字节码的数量更小。
链接地址: http://www.djcxy.com/p/19415.html上一篇: Python: multiple assignment vs. individual assignment speed