为什么 return 元组比 Python 中的多个值更快?
Why it is faster to return a tuple than multiple values in Python?
我做了一个小测试:
In [12]: def test1():
...: return 1,2,3
...:
In [13]: def test2():
...: return (1,2,3)
...:
In [14]: %timeit a,b,c = test1()
最慢的 运行 花费的时间比最快的多 66.88 倍。这可能意味着正在缓存中间结果。
10000000 次循环,3 次循环中的最佳次数:每次循环 92.7 ns
In [15]: %timeit a,b,c = test2()
最慢的 运行 花费的时间是最快的 74.43 倍。这可能意味着正在缓存中间结果。
10000000 次循环,3 次循环中的最佳次数:每次循环 80.1 ns
返回一个元组比返回多个值快大约 15%。为什么会这样?
test1
和 test2
都产生相同的字节码,因此它们必须以相同的速度执行。您的测量条件不一致(例如,由于额外的后台进程,CPU test2 的负载增加了)。
>>> import dis
>>> def test1():
... return 1,2,3
...
>>> def test2():
... return (1,2,3)
...
>>> dis.dis(test1)
2 0 LOAD_CONST 4 ((1, 2, 3))
3 RETURN_VALUE
>>> dis.dis(test2)
2 0 LOAD_CONST 4 ((1, 2, 3))
3 RETURN_VALUE
>>>
我做了一个小测试:
In [12]: def test1():
...: return 1,2,3
...:
In [13]: def test2():
...: return (1,2,3)
...:
In [14]: %timeit a,b,c = test1()
最慢的 运行 花费的时间比最快的多 66.88 倍。这可能意味着正在缓存中间结果。 10000000 次循环,3 次循环中的最佳次数:每次循环 92.7 ns
In [15]: %timeit a,b,c = test2()
最慢的 运行 花费的时间是最快的 74.43 倍。这可能意味着正在缓存中间结果。 10000000 次循环,3 次循环中的最佳次数:每次循环 80.1 ns
返回一个元组比返回多个值快大约 15%。为什么会这样?
test1
和 test2
都产生相同的字节码,因此它们必须以相同的速度执行。您的测量条件不一致(例如,由于额外的后台进程,CPU test2 的负载增加了)。
>>> import dis
>>> def test1():
... return 1,2,3
...
>>> def test2():
... return (1,2,3)
...
>>> dis.dis(test1)
2 0 LOAD_CONST 4 ((1, 2, 3))
3 RETURN_VALUE
>>> dis.dis(test2)
2 0 LOAD_CONST 4 ((1, 2, 3))
3 RETURN_VALUE
>>>