zoukankan      html  css  js  c++  java
  • python可变交换性能优化

    许多新的压力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所有的方法是使用指针操作

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    二分图的最大匹配
    染色法判定二分图
    kruskal求最小生成树
    prim算法求最小生成树
    floyd
    spfa算法
    bellman_ford
    Dijkstra
    文件操作_1-18 选择题
    会话控制_2-5 编程练习
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4850919.html
Copyright © 2011-2022 走看看