离许多新的压力python性能优化见交换两个变量值可以使用
a,b = b,a
这样能够提高性能
>>> from timeit import Timer
>>> Timer("t=a;a=b;b=t","a=1;b=2").timeit()
0.06279781319366587
>>> Timer("a,b=b,a","a=1;b=2").timeit()
0.0378979925538232
>>>
从执行时间上看,确实节省了快一半的时间
通过dis得到python字节码
>>> def func():
... a,b = b,a
...
>>> import dis
>>> dis.dis(func)
2 0 LOAD_FAST 0 (b)
3 LOAD_FAST 1 (a)
6 ROT_TWO
7 STORE_FAST 1 (a)
10 STORE_FAST 0 (b)
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
>>>
能够看出主要是ROT_TWO指令的功劳:
查阅python文档能够知道有ROT_TWO ROT_THREE ROT_FOUR这种指令,能够直接交换两个变量、三个变量、四个变量的值
在python3.4的源代码中查阅ceval.c文件能够看到:
TARGET(ROT_TWO) {
PyObject *top = TOP();
PyObject *second = SECOND();
SET_TOP(second);
SET_SECOND(top);
FAST_DISPATCH();
} TARGET(ROT_THREE) {
PyObject *top = TOP();
PyObject *second = SECOND();
PyObject *third = THIRD();
SET_TOP(second);
SET_SECOND(third);
SET_THIRD(top);
FAST_DISPATCH();
}
就是这些指令的详细C语言实现在,
这一切都归结。快速或因a,b = b,a所有的方法是使用指针操作
版权声明:本文博主原创文章,博客,未经同意不得转载。