为什么手动字符串反转比Python 2.7中的反转更差?Slice中使用的算法是什么?

log*_*kal 5 python timeit slice python-2.7

低于Slice和手动反向操作之间的性能差异.如果是这种情况,那是什么原因?

timeit.timeit("a[::-1]","a=[1,2,3,4,5,6]",number=100)
6.054327968740836e-05

timeit.timeit("[a[i] for i in range(len(a)-1,-1,-1)]","a=[1,2,3,4,5,6]",number=100)
0.0003132152330920235
Run Code Online (Sandbox Code Playgroud)

Fla*_*lau 8

这是字节码

from dis import dis
a = [1,2,3,4,5,6]

def func1():
    a[::-1]

def func2():
    [a[i] for i in range(len(a)-1,-1,-1)]

def func3():
    reversed(a)
Run Code Online (Sandbox Code Playgroud)

在第二种方法中,您将找到长度,创建带范围的副本并创建变量i.

字节码

也可以使用reverse来创建一个可迭代的.

bytecode2