| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
834792890
8年前发布

Python -- 让你的代码运行的更快的技巧

   <h2>平台</h2>    <p>运行测试的平台环境:</p>    <pre>  <code class="language-python">>>> importsys  >>> importplatform  >>> platform.system()  'Linux'  >>> platform.release()  '3.11.0-19-generic'  >>> sys.version  '2.7.5+ (default, Feb 27 2014, 19:37:08)  [GCC 4.8.1]'  >>> fromtimeitimporttimeit  >>> fromdisimportdis  >>>      </code></pre>    <p>以下的代码主要是使用了 timeit 函数测试处理时间,以及使用 dis 函数显示详细的处理步骤(汇编的方式),能让你清楚的知道,慢在哪里?为什么慢?</p>    <h2>测试用例 1</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      d = {}      return d     >>>   >>> timeit(a, number=1000000)  ... 0.0905051231384  >>>   >>> dis(a)    5          0 BUILD_MAP                0                3 STORE_FAST              0 (d)       6          6 LOAD_FAST                0 (d)                9 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      d = dict()      return d     >>>   >>> timeit(a, number=1000000)  ... 0.206549167633  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (dict)                3 CALL_FUNCTION            0                6 STORE_FAST              0 (d)       6          9 LOAD_FAST                0 (d)              12 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 2</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      l = [0, 8, 6, 4, 2, 1, 3, 5, 7, 9]      l.sort()      return l     >>>   >>> timeit(a, number=1000000)  ... 0.53688287735  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (0)                3 LOAD_CONST              2 (8)                6 LOAD_CONST              3 (6)                9 LOAD_CONST              4 (4)              12 LOAD_CONST              5 (2)              15 LOAD_CONST              6 (1)              18 LOAD_CONST              7 (3)              21 LOAD_CONST              8 (5)              24 LOAD_CONST              9 (7)              27 LOAD_CONST              10 (9)              30 BUILD_LIST              10              33 STORE_FAST              0 (l)       6          36 LOAD_FAST                0 (l)              39 LOAD_ATTR                0 (sort)              42 CALL_FUNCTION            0              45 POP_TOP                   7          46 LOAD_FAST                0 (l)              49 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      l = [0, 8, 6, 4, 2, 1, 3, 5, 7, 9]      return sorted(l)     >>>   >>> timeit(a, number=1000000)  ... 0.781757831573  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (0)                3 LOAD_CONST              2 (8)                6 LOAD_CONST              3 (6)                9 LOAD_CONST              4 (4)              12 LOAD_CONST              5 (2)              15 LOAD_CONST              6 (1)              18 LOAD_CONST              7 (3)              21 LOAD_CONST              8 (5)              24 LOAD_CONST              9 (7)              27 LOAD_CONST              10 (9)              30 BUILD_LIST              10              33 STORE_FAST              0 (l)       6          36 LOAD_GLOBAL              0 (sorted)              39 LOAD_FAST                0 (l)              42 CALL_FUNCTION            1              45 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 3</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a, b, c, d, e, f, g, h, i, j = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9      return j, i, h, g, f, e, d, c, b, a     >>>   >>> timeit(a, number=1000000)  ... 0.216089963913  >>>   >>> dis(a)    5          0 LOAD_CONST              11 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9))                3 UNPACK_SEQUENCE        10                6 STORE_FAST              0 (a)                9 STORE_FAST              1 (b)              12 STORE_FAST              2 (c)              15 STORE_FAST              3 (d)              18 STORE_FAST              4 (e)              21 STORE_FAST              5 (f)              24 STORE_FAST              6 (g)              27 STORE_FAST              7 (h)              30 STORE_FAST              8 (i)              33 STORE_FAST              9 (j)       6          36 LOAD_FAST                9 (j)              39 LOAD_FAST                8 (i)              42 LOAD_FAST                7 (h)              45 LOAD_FAST                6 (g)              48 LOAD_FAST                5 (f)              51 LOAD_FAST                4 (e)              54 LOAD_FAST                3 (d)              57 LOAD_FAST                2 (c)              60 LOAD_FAST                1 (b)              63 LOAD_FAST                0 (a)              66 BUILD_TUPLE            10              69 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = 0      b = 1      c = 2      d = 3      e = 4      f = 5      g = 6      h = 7      i = 8      j = 9      return j, i, h, g, f, e, d, c, b, a     >>>   >>> timeit(a, number=1000000)  ... 0.249029874802  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (0)                3 STORE_FAST              0 (a)       6          6 LOAD_CONST              2 (1)                9 STORE_FAST              1 (b)       7          12 LOAD_CONST              3 (2)              15 STORE_FAST              2 (c)       8          18 LOAD_CONST              4 (3)              21 STORE_FAST              3 (d)       9          24 LOAD_CONST              5 (4)              27 STORE_FAST              4 (e)      10          30 LOAD_CONST              6 (5)              33 STORE_FAST              5 (f)      11          36 LOAD_CONST              7 (6)              39 STORE_FAST              6 (g)      12          42 LOAD_CONST              8 (7)              45 STORE_FAST              7 (h)      13          48 LOAD_CONST              9 (8)              51 STORE_FAST              8 (i)      14          54 LOAD_CONST              10 (9)              57 STORE_FAST              9 (j)      15          60 LOAD_FAST                9 (j)              63 LOAD_FAST                8 (i)              66 LOAD_FAST                7 (h)              69 LOAD_FAST                6 (g)              72 LOAD_FAST                5 (f)              75 LOAD_FAST                4 (e)              78 LOAD_FAST                3 (d)              81 LOAD_FAST                2 (c)              84 LOAD_FAST                1 (b)              87 LOAD_FAST                0 (a)              90 BUILD_TUPLE            10              93 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 4</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a, b, c, d, e, f = 2, 5, 52, 25, 225, 552      if a < b and b < c and c < d and d < e and e < f:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.176034927368  >>>   >>> dis(a)    5          0 LOAD_CONST              7 ((2, 5, 52, 25, 225, 552))                3 UNPACK_SEQUENCE          6                6 STORE_FAST              0 (a)                9 STORE_FAST              1 (b)              12 STORE_FAST              2 (c)              15 STORE_FAST              3 (d)              18 STORE_FAST              4 (e)              21 STORE_FAST              5 (f)       6          24 LOAD_FAST                0 (a)              27 LOAD_FAST                1 (b)              30 COMPARE_OP              0 (<)              33 POP_JUMP_IF_FALSE      88              36 LOAD_FAST                1 (b)              39 LOAD_FAST                2 (c)              42 COMPARE_OP              0 (<)              45 POP_JUMP_IF_FALSE      88              48 LOAD_FAST                2 (c)              51 LOAD_FAST                3 (d)              54 COMPARE_OP              0 (<)              57 POP_JUMP_IF_FALSE      88              60 LOAD_FAST                3 (d)              63 LOAD_FAST                4 (e)              66 COMPARE_OP              0 (<)              69 POP_JUMP_IF_FALSE      88              72 LOAD_FAST                4 (e)              75 LOAD_FAST                5 (f)              78 COMPARE_OP              0 (<)              81 POP_JUMP_IF_FALSE      88       7          84 LOAD_GLOBAL              0 (True)              87 RETURN_VALUE               8    >>  88 LOAD_GLOBAL              1 (False)              91 RETURN_VALUE             >>>   </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a, b, c, d, e, f = 2, 5, 52, 25, 225, 552      if a < b < c < d < e < f:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.208202123642  >>>   >>> dis(a)    5          0 LOAD_CONST              7 ((2, 5, 52, 25, 225, 552))                3 UNPACK_SEQUENCE          6                6 STORE_FAST              0 (a)                9 STORE_FAST              1 (b)              12 STORE_FAST              2 (c)              15 STORE_FAST              3 (d)              18 STORE_FAST              4 (e)              21 STORE_FAST              5 (f)       6          24 LOAD_FAST                0 (a)              27 LOAD_FAST                1 (b)              30 DUP_TOP                          31 ROT_THREE                        32 COMPARE_OP              0 (<)              35 JUMP_IF_FALSE_OR_POP    80              38 LOAD_FAST                2 (c)              41 DUP_TOP                          42 ROT_THREE                        43 COMPARE_OP              0 (<)              46 JUMP_IF_FALSE_OR_POP    80              49 LOAD_FAST                3 (d)              52 DUP_TOP                          53 ROT_THREE                        54 COMPARE_OP              0 (<)              57 JUMP_IF_FALSE_OR_POP    80              60 LOAD_FAST                4 (e)              63 DUP_TOP                          64 ROT_THREE                        65 COMPARE_OP              0 (<)              68 JUMP_IF_FALSE_OR_POP    80              71 LOAD_FAST                5 (f)              74 COMPARE_OP              0 (<)              77 JUMP_FORWARD            2 (to 82)          >>  80 ROT_TWO                          81 POP_TOP                      >>  82 POP_JUMP_IF_FALSE      89       7          85 LOAD_GLOBAL              0 (True)              88 RETURN_VALUE               8    >>  89 LOAD_GLOBAL              1 (False)              92 RETURN_VALUE             >>>   </code></pre>    <h2>测试用例 5</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = True      if a:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.109908103943  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (True)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 POP_JUMP_IF_FALSE      16       7          12 LOAD_GLOBAL              0 (True)              15 RETURN_VALUE               8    >>  16 LOAD_GLOBAL              1 (False)              19 RETURN_VALUE             >>>      </code></pre>    <p>更慢方式:</p>    <pre>  <code class="language-python">def a():      a = True      if a is True:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.141321897507  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (True)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 LOAD_GLOBAL              0 (True)              12 COMPARE_OP              8 (is)              15 POP_JUMP_IF_FALSE      22       7          18 LOAD_GLOBAL              0 (True)              21 RETURN_VALUE               8    >>  22 LOAD_GLOBAL              1 (False)              25 RETURN_VALUE             >>>         </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      a = True      if a == True:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.149966001511  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (True)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 LOAD_GLOBAL              0 (True)              12 COMPARE_OP              2 (==)              15 POP_JUMP_IF_FALSE      22       7          18 LOAD_GLOBAL              0 (True)              21 RETURN_VALUE               8    >>  22 LOAD_GLOBAL              1 (False)              25 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 6</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = 1      if not a is 2:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.0980911254883  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 LOAD_CONST              2 (2)              12 COMPARE_OP              9 (is not)              15 POP_JUMP_IF_FALSE      22       7          18 LOAD_GLOBAL              0 (True)              21 RETURN_VALUE               8    >>  22 LOAD_GLOBAL              1 (False)              25 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = 1      if a is not 2:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.10059595108  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 LOAD_CONST              2 (2)              12 COMPARE_OP              9 (is not)              15 POP_JUMP_IF_FALSE      22       7          18 LOAD_GLOBAL              0 (True)              21 RETURN_VALUE               8    >>  22 LOAD_GLOBAL              1 (False)              25 RETURN_VALUE             >>>         </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      a = 1      if a != 2:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.102056026459  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 LOAD_CONST              2 (2)              12 COMPARE_OP              3 (!=)              15 POP_JUMP_IF_FALSE      22       7          18 LOAD_GLOBAL              0 (True)              21 RETURN_VALUE               8    >>  22 LOAD_GLOBAL              1 (False)              25 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 7</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = []      if a:          return False      return True     >>>   >>> timeit(a, number=1000000)  ... 0.111177921295  >>>   >>> dis(a)    5          0 BUILD_LIST              0                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 POP_JUMP_IF_FALSE      16       7          12 LOAD_GLOBAL              0 (False)              15 RETURN_VALUE               8    >>  16 LOAD_GLOBAL              1 (True)              19 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = []      if not a:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.113872051239  >>>   >>> dis(a)    5          0 BUILD_LIST              0                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 POP_JUMP_IF_TRUE        16       7          12 LOAD_GLOBAL              0 (True)              15 RETURN_VALUE               8    >>  16 LOAD_GLOBAL              1 (False)              19 RETURN_VALUE             >>>      </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      a = []      if len(a) >>   >>> timeit(a, number=1000000)  ... 0.13893699646  >>>   >>> dis(a)    5          0 BUILD_LIST              0                3 STORE_FAST              0 (a)       6          6 LOAD_GLOBAL              0 (len)                9 LOAD_FAST                0 (a)              12 CALL_FUNCTION            1              15 LOAD_CONST              1 (0)              18 COMPARE_OP              1 (>  28 LOAD_GLOBAL              2 (False)              31 RETURN_VALUE             >>>      </code></pre>    <p>超级慢的方式:</p>    <pre>  <code class="language-python">def a():      a = []      if a == []:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.16094994545  >>>   >>> dis(a)    5          0 BUILD_LIST              0                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 BUILD_LIST              0              12 COMPARE_OP              2 (==)              15 POP_JUMP_IF_FALSE      22       7          18 LOAD_GLOBAL              0 (True)              21 RETURN_VALUE               8    >>  22 LOAD_GLOBAL              1 (False)              25 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 8</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = object()      if not a:          return False      return True     >>>   >>> timeit(a, number=1000000)  ... 0.150635004044  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (object)                3 CALL_FUNCTION            0                6 STORE_FAST              0 (a)       6          9 LOAD_FAST                0 (a)              12 POP_JUMP_IF_TRUE        19       7          15 LOAD_GLOBAL              1 (False)              18 RETURN_VALUE               8    >>  19 LOAD_GLOBAL              2 (True)              22 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = object()      if a is None:          return False      return True     >>>   >>> timeit(a, number=1000000)  ... 0.15754199028  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (object)                3 CALL_FUNCTION            0                6 STORE_FAST              0 (a)       6          9 LOAD_FAST                0 (a)              12 LOAD_CONST              0 (None)              15 COMPARE_OP              8 (is)              18 POP_JUMP_IF_FALSE      25       7          21 LOAD_GLOBAL              2 (False)              24 RETURN_VALUE               8    >>  25 LOAD_GLOBAL              3 (True)              28 RETURN_VALUE             >>>      </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      a = object()      if a:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.157824993134  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (object)                3 CALL_FUNCTION            0                6 STORE_FAST              0 (a)       6          9 LOAD_FAST                0 (a)              12 POP_JUMP_IF_FALSE      19       7          15 LOAD_GLOBAL              1 (True)              18 RETURN_VALUE               8    >>  19 LOAD_GLOBAL              2 (False)              22 RETURN_VALUE             >>>      </code></pre>    <p>超级慢的方式:</p>    <pre>  <code class="language-python">def a():      a = object()      if a is not None:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.181853055954  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (object)                3 CALL_FUNCTION            0                6 STORE_FAST              0 (a)       6          9 LOAD_FAST                0 (a)              12 LOAD_CONST              0 (None)              15 COMPARE_OP              9 (is not)              18 POP_JUMP_IF_FALSE      25       7          21 LOAD_GLOBAL              2 (True)              24 RETURN_VALUE               8    >>  25 LOAD_GLOBAL              3 (False)              28 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 9</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = [1, 2, 3, 4, 5]      s = 0      for p, v in enumerate(a):          s += p          s += v      return s     >>>   >>> timeit(a, number=1000000)  ... 0.738418102264  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 LOAD_CONST              2 (2)                6 LOAD_CONST              3 (3)                9 LOAD_CONST              4 (4)              12 LOAD_CONST              5 (5)              15 BUILD_LIST              5              18 STORE_FAST              0 (a)       6          21 LOAD_CONST              6 (0)              24 STORE_FAST              1 (s)       7          27 SETUP_LOOP              46 (to 76)              30 LOAD_GLOBAL              0 (enumerate)              33 LOAD_FAST                0 (a)              36 CALL_FUNCTION            1              39 GET_ITER                      >>  40 FOR_ITER                32 (to 75)              43 UNPACK_SEQUENCE          2              46 STORE_FAST              2 (p)              49 STORE_FAST              3 (v)       8          52 LOAD_FAST                1 (s)              55 LOAD_FAST                2 (p)              58 INPLACE_ADD                      59 STORE_FAST              1 (s)       9          62 LOAD_FAST                1 (s)              65 LOAD_FAST                3 (v)              68 INPLACE_ADD                      69 STORE_FAST              1 (s)              72 JUMP_ABSOLUTE          40          >>  75 POP_BLOCK                10    >>  76 LOAD_FAST                1 (s)              79 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = [1, 2, 3, 4, 5]      s = 0      for i in range(len(a)):          s += i          s += a[i]      return s     >>>   >>> timeit(a, number=1000000)  ... 0.800552845001  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 LOAD_CONST              2 (2)                6 LOAD_CONST              3 (3)                9 LOAD_CONST              4 (4)              12 LOAD_CONST              5 (5)              15 BUILD_LIST              5              18 STORE_FAST              0 (a)       6          21 LOAD_CONST              6 (0)              24 STORE_FAST              1 (s)       7          27 SETUP_LOOP              50 (to 80)              30 LOAD_GLOBAL              0 (range)              33 LOAD_GLOBAL              1 (len)              36 LOAD_FAST                0 (a)              39 CALL_FUNCTION            1              42 CALL_FUNCTION            1              45 GET_ITER                      >>  46 FOR_ITER                30 (to 79)              49 STORE_FAST              2 (i)       8          52 LOAD_FAST                1 (s)              55 LOAD_FAST                2 (i)              58 INPLACE_ADD                      59 STORE_FAST              1 (s)       9          62 LOAD_FAST                1 (s)              65 LOAD_FAST                0 (a)              68 LOAD_FAST                2 (i)              71 BINARY_SUBSCR                    72 INPLACE_ADD                      73 STORE_FAST              1 (s)              76 JUMP_ABSOLUTE          46          >>  79 POP_BLOCK                10    >>  80 LOAD_FAST                1 (s)              83 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 10</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      r = ''      for i in range(10):          r += str(i)      return r     >>>   >>> timeit(a, number=1000000)  ... 1.63575387001  >>>   >>> dis(a)    5          0 LOAD_CONST              1 ('')                3 STORE_FAST              0 (r)       6          6 SETUP_LOOP              36 (to 45)                9 LOAD_GLOBAL              0 (range)              12 LOAD_CONST              2 (10)              15 CALL_FUNCTION            1              18 GET_ITER                      >>  19 FOR_ITER                22 (to 44)              22 STORE_FAST              1 (i)       7          25 LOAD_FAST                0 (r)              28 LOAD_GLOBAL              1 (str)              31 LOAD_FAST                1 (i)              34 CALL_FUNCTION            1              37 INPLACE_ADD                      38 STORE_FAST              0 (r)              41 JUMP_ABSOLUTE          19          >>  44 POP_BLOCK                 8    >>  45 LOAD_FAST                0 (r)              48 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      r = []      for i in range(10):          r.append(str(i))      return ''.join(r)     >>>   >>> timeit(a, number=1000000)  ... 2.1280169487  >>>   >>> dis(a)    5          0 BUILD_LIST              0                3 STORE_FAST              0 (r)       6          6 SETUP_LOOP              39 (to 48)                9 LOAD_GLOBAL              0 (range)              12 LOAD_CONST              1 (10)              15 CALL_FUNCTION            1              18 GET_ITER                      >>  19 FOR_ITER                25 (to 47)              22 STORE_FAST              1 (i)       7          25 LOAD_FAST                0 (r)              28 LOAD_ATTR                1 (append)              31 LOAD_GLOBAL              2 (str)              34 LOAD_FAST                1 (i)              37 CALL_FUNCTION            1              40 CALL_FUNCTION            1              43 POP_TOP                          44 JUMP_ABSOLUTE          19          >>  47 POP_BLOCK                 8    >>  48 LOAD_CONST              2 ('')              51 LOAD_ATTR                3 (join)              54 LOAD_FAST                0 (r)              57 CALL_FUNCTION            1              60 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 11</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = 5      b = 2      c = 3      return "%s" % (a*(b+c))     >>>   >>> timeit(a, number=1000000)  ... 0.229720830917  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (5)                3 STORE_FAST              0 (a)       6          6 LOAD_CONST              2 (2)                9 STORE_FAST              1 (b)       7          12 LOAD_CONST              3 (3)              15 STORE_FAST              2 (c)       8          18 LOAD_CONST              4 ('%s')              21 LOAD_FAST                0 (a)              24 LOAD_FAST                1 (b)              27 LOAD_FAST                2 (c)              30 BINARY_ADD                        31 BINARY_MULTIPLY                  32 BINARY_MODULO                    33 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">   def a():      a = 5      b = 2      c = 3      return str(a*(b+c))     >>>   >>> timeit(a, number=1000000)  ... 0.25043797493  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (5)                3 STORE_FAST              0 (a)       6          6 LOAD_CONST              2 (2)                9 STORE_FAST              1 (b)       7          12 LOAD_CONST              3 (3)              15 STORE_FAST              2 (c)       8          18 LOAD_GLOBAL              0 (str)              21 LOAD_FAST                0 (a)              24 LOAD_FAST                1 (b)              27 LOAD_FAST                2 (c)              30 BINARY_ADD                        31 BINARY_MULTIPLY                  32 CALL_FUNCTION            1              35 RETURN_VALUE             >>>      </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      a = 5      b = 2      c = 3      return "%d" % (a*(b+c))     >>>   >>> timeit(a, number=1000000)  ... 0.583065986633  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (5)                3 STORE_FAST              0 (a)       6          6 LOAD_CONST              2 (2)                9 STORE_FAST              1 (b)       7          12 LOAD_CONST              3 (3)              15 STORE_FAST              2 (c)       8          18 LOAD_CONST              4 ('%d')              21 LOAD_FAST                0 (a)              24 LOAD_FAST                1 (b)              27 LOAD_FAST                2 (c)              30 BINARY_ADD                        31 BINARY_MULTIPLY                  32 BINARY_MODULO                    33 RETURN_VALUE             >>>            </code></pre>    <h2>测试用例 12</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = [1, 2, 3, 4, 5]      return len(a)     >>>   >>> timeit(a, number=1000000)  ... 0.194615840912  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 LOAD_CONST              2 (2)                6 LOAD_CONST              3 (3)                9 LOAD_CONST              4 (4)              12 LOAD_CONST              5 (5)              15 BUILD_LIST              5              18 STORE_FAST              0 (a)       6          21 LOAD_GLOBAL              0 (len)              24 LOAD_FAST                0 (a)              27 CALL_FUNCTION            1              30 RETURN_VALUE             >>>            </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = [1, 2, 3, 4, 5]      return a.__len__()     >>>   >>> timeit(a, number=1000000)  ... 0.220345020294  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 LOAD_CONST              2 (2)                6 LOAD_CONST              3 (3)                9 LOAD_CONST              4 (4)              12 LOAD_CONST              5 (5)              15 BUILD_LIST              5              18 STORE_FAST              0 (a)       6          21 LOAD_FAST                0 (a)              24 LOAD_ATTR                0 (__len__)              27 CALL_FUNCTION            0              30 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 13</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = 1      b = 2      c = 2      d = 5      return (a+b+c)*d     >>>   >>> timeit(a, number=1000000)  ... 0.170273065567  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 STORE_FAST              0 (a)       6          6 LOAD_CONST              2 (2)                9 STORE_FAST              1 (b)       7          12 LOAD_CONST              2 (2)              15 STORE_FAST              2 (c)       8          18 LOAD_CONST              3 (5)              21 STORE_FAST              3 (d)       9          24 LOAD_FAST                0 (a)              27 LOAD_FAST                1 (b)              30 BINARY_ADD                        31 LOAD_FAST                2 (c)              34 BINARY_ADD                        35 LOAD_FAST                3 (d)              38 BINARY_MULTIPLY                  39 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = 1      b = 2      c = 2      d = 5      return (a.__add__(b.__add__(c))).__mul__(d)     >>>   >>> timeit(a, number=1000000)  ... 0.363096952438  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 STORE_FAST              0 (a)       6          6 LOAD_CONST              2 (2)                9 STORE_FAST              1 (b)       7          12 LOAD_CONST              2 (2)              15 STORE_FAST              2 (c)       8          18 LOAD_CONST              3 (5)              21 STORE_FAST              3 (d)       9          24 LOAD_FAST                0 (a)              27 LOAD_ATTR                0 (__add__)              30 LOAD_FAST                1 (b)              33 LOAD_ATTR                0 (__add__)              36 LOAD_FAST                2 (c)              39 CALL_FUNCTION            1              42 CALL_FUNCTION            1              45 LOAD_ATTR                1 (__mul__)              48 LOAD_FAST                3 (d)              51 CALL_FUNCTION            1              54 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 14</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">class Z():         def__init__(self, v):          self.v = v         def__mul__(self, o):          return Z(self.v * o.v)         def__add__(self, o):          return Z(self.v + o.v)        def a():      a = Z(5)      b = Z(2)      c = Z(3)      return (b.__add__(c)).__mul__(a)     >>>   >>> timeit(a, number=1000000)  ... 1.7775759697  >>>   >>> dis(a)   17          0 LOAD_GLOBAL              0 (Z)                3 LOAD_CONST              1 (5)                6 CALL_FUNCTION            1                9 STORE_FAST              0 (a)      18          12 LOAD_GLOBAL              0 (Z)              15 LOAD_CONST              2 (2)              18 CALL_FUNCTION            1              21 STORE_FAST              1 (b)      19          24 LOAD_GLOBAL              0 (Z)              27 LOAD_CONST              3 (3)              30 CALL_FUNCTION            1              33 STORE_FAST              2 (c)      20          36 LOAD_FAST                1 (b)              39 LOAD_ATTR                1 (__add__)              42 LOAD_FAST                2 (c)              45 CALL_FUNCTION            1              48 LOAD_ATTR                2 (__mul__)              51 LOAD_FAST                0 (a)              54 CALL_FUNCTION            1              57 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">class Z():         def__init__(self, v):          self.v = v         def__mul__(self, o):          return Z(self.v * o.v)         def__add__(self, o):          return Z(self.v + o.v)        def a():      a = Z(5)      b = Z(2)      c = Z(3)      return (b + c) * a     >>>   >>> timeit(a, number=1000000)  ... 2.79053497314  >>>   >>> dis(a)   17          0 LOAD_GLOBAL              0 (Z)                3 LOAD_CONST              1 (5)                6 CALL_FUNCTION            1                9 STORE_FAST              0 (a)      18          12 LOAD_GLOBAL              0 (Z)              15 LOAD_CONST              2 (2)              18 CALL_FUNCTION            1              21 STORE_FAST              1 (b)      19          24 LOAD_GLOBAL              0 (Z)              27 LOAD_CONST              3 (3)              30 CALL_FUNCTION            1              33 STORE_FAST              2 (c)      20          36 LOAD_FAST                1 (b)              39 LOAD_FAST                2 (c)              42 BINARY_ADD                        43 LOAD_FAST                0 (a)              46 BINARY_MULTIPLY                  47 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 15</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      s = 0      for i in range(50000):          s += i      return s        number = 100000     >>>   >>> timeit(a, number=100000)  ... 177.31340313  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (0)                3 STORE_FAST              0 (s)       6          6 SETUP_LOOP              30 (to 39)                9 LOAD_GLOBAL              0 (range)              12 LOAD_CONST              2 (50000)              15 CALL_FUNCTION            1              18 GET_ITER                      >>  19 FOR_ITER                16 (to 38)              22 STORE_FAST              1 (i)       7          25 LOAD_FAST                0 (s)              28 LOAD_FAST                1 (i)              31 INPLACE_ADD                      32 STORE_FAST              0 (s)              35 JUMP_ABSOLUTE          19          >>  38 POP_BLOCK                 8    >>  39 LOAD_FAST                0 (s)              42 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      return sum(i for i in range(50000))        number = 100000     >>>   >>> timeit(a, number=100000)  ... 215.36849308  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (sum)                3 LOAD_CONST              1 (<code> at 0x7f7357e854b0, file "/tmp/__pfw_test15_t2.py", line 5>)                6 MAKE_FUNCTION            0                9 LOAD_GLOBAL              1 (range)              12 LOAD_CONST              2 (50000)              15 CALL_FUNCTION            1              18 GET_ITER                          19 CALL_FUNCTION            1              22 CALL_FUNCTION            1              25 RETURN_VALUE             >>>      </code>  </code></pre>    <h2>测试用例 16</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      return [i for i in range(1000)]        number = 100000     >>>   >>> timeit(a, number=100000)  ... 3.07614183426  >>>   >>> dis(a)    5          0 BUILD_LIST              0                3 LOAD_GLOBAL              0 (range)                6 LOAD_CONST              1 (1000)                9 CALL_FUNCTION            1              12 GET_ITER                      >>  13 FOR_ITER                12 (to 28)              16 STORE_FAST              0 (i)              19 LOAD_FAST                0 (i)              22 LIST_APPEND              2              25 JUMP_ABSOLUTE          13          >>  28 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      l = []      for i in range(1000):          l.append(i)      return l        number = 100000     >>>   >>> timeit(a, number=100000)  ... 6.29185986519  >>>   >>> dis(a)    5          0 BUILD_LIST              0                3 STORE_FAST              0 (l)       6          6 SETUP_LOOP              33 (to 42)                9 LOAD_GLOBAL              0 (range)              12 LOAD_CONST              1 (1000)              15 CALL_FUNCTION            1              18 GET_ITER                      >>  19 FOR_ITER                19 (to 41)              22 STORE_FAST              1 (i)       7          25 LOAD_FAST                0 (l)              28 LOAD_ATTR                1 (append)              31 LOAD_FAST                1 (i)              34 CALL_FUNCTION            1              37 POP_TOP                          38 JUMP_ABSOLUTE          19          >>  41 POP_BLOCK                 8    >>  42 LOAD_FAST                0 (l)              45 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 17</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      return {str(i): i*2 for i in range(100)}     >>>   >>> timeit(a, number=1000000)  ... 17.8982248306  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (<code> at 0x7f81ea7854b0, file "/tmp/__pfw_test17_t3.py", line 5>)                3 MAKE_FUNCTION            0                6 LOAD_GLOBAL              0 (range)                9 LOAD_CONST              2 (100)              12 CALL_FUNCTION            1              15 GET_ITER                          16 CALL_FUNCTION            1              19 RETURN_VALUE             >>>      </code>  </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      d = {}      for i in range(100):          d[str(i)] = i*2      return d     >>>   >>> timeit(a, number=1000000)  ... 18.513548851  >>>   >>> dis(a)    5          0 BUILD_MAP                0                3 STORE_FAST              0 (d)       6          6 SETUP_LOOP              40 (to 49)                9 LOAD_GLOBAL              0 (range)              12 LOAD_CONST              1 (100)              15 CALL_FUNCTION            1              18 GET_ITER                      >>  19 FOR_ITER                26 (to 48)              22 STORE_FAST              1 (i)       7          25 LOAD_FAST                1 (i)              28 LOAD_CONST              2 (2)              31 BINARY_MULTIPLY                  32 LOAD_FAST                0 (d)              35 LOAD_GLOBAL              1 (str)              38 LOAD_FAST                1 (i)              41 CALL_FUNCTION            1              44 STORE_SUBSCR                      45 JUMP_ABSOLUTE          19          >>  48 POP_BLOCK                 8    >>  49 LOAD_FAST                0 (d)              52 RETURN_VALUE             >>>         </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      d = {}      for i in range(100):          d.update({str(i): i*2})      return d     >>>   >>> timeit(a, number=1000000)  ... 36.9908900261  >>>   >>> dis(a)    5          0 BUILD_MAP                0                3 STORE_FAST              0 (d)       6          6 SETUP_LOOP              50 (to 59)                9 LOAD_GLOBAL              0 (range)              12 LOAD_CONST              1 (100)              15 CALL_FUNCTION            1              18 GET_ITER                      >>  19 FOR_ITER                36 (to 58)              22 STORE_FAST              1 (i)       7          25 LOAD_FAST                0 (d)              28 LOAD_ATTR                1 (update)              31 BUILD_MAP                1              34 LOAD_FAST                1 (i)              37 LOAD_CONST              2 (2)              40 BINARY_MULTIPLY                  41 LOAD_GLOBAL              2 (str)              44 LOAD_FAST                1 (i)              47 CALL_FUNCTION            1              50 STORE_MAP                        51 CALL_FUNCTION            1              54 POP_TOP                          55 JUMP_ABSOLUTE          19          >>  58 POP_BLOCK                 8    >>  59 LOAD_FAST                0 (d)              62 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 18</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      l = range(50, -20, -2)      return {p: v for p, v in enumerate(l)}     >>>   >>> timeit(a, number=1000000)  ... 2.82184195518  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (range)                3 LOAD_CONST              1 (50)                6 LOAD_CONST              2 (-20)                9 LOAD_CONST              3 (-2)              12 CALL_FUNCTION            3              15 STORE_FAST              0 (l)       6          18 LOAD_CONST              4 (<code> at 0x7ff850f7a4b0, file "/tmp/__pfw_test18_t3.py", line 6>)              21 MAKE_FUNCTION            0              24 LOAD_GLOBAL              1 (enumerate)              27 LOAD_FAST                0 (l)              30 CALL_FUNCTION            1              33 GET_ITER                          34 CALL_FUNCTION            1              37 RETURN_VALUE             >>>   </code>  </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      l = range(50, -20, -2)      d = {}      for p, v in enumerate(l):          d[p] = v      return d     >>>   >>> timeit(a, number=1000000)  ... 3.04933786392  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (range)                3 LOAD_CONST              1 (50)                6 LOAD_CONST              2 (-20)                9 LOAD_CONST              3 (-2)              12 CALL_FUNCTION            3              15 STORE_FAST              0 (l)       6          18 BUILD_MAP                0              21 STORE_FAST              1 (d)       7          24 SETUP_LOOP              36 (to 63)              27 LOAD_GLOBAL              1 (enumerate)              30 LOAD_FAST                0 (l)              33 CALL_FUNCTION            1              36 GET_ITER                      >>  37 FOR_ITER                22 (to 62)              40 UNPACK_SEQUENCE          2              43 STORE_FAST              2 (p)              46 STORE_FAST              3 (v)       8          49 LOAD_FAST                3 (v)              52 LOAD_FAST                1 (d)              55 LOAD_FAST                2 (p)              58 STORE_SUBSCR                      59 JUMP_ABSOLUTE          37          >>  62 POP_BLOCK                 9    >>  63 LOAD_FAST                1 (d)              66 RETURN_VALUE             >>>         </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      l = range(50, -20, -2)      d = {}      for p, v in enumerate(l):          d.update({p: v})      return d     >>>   >>> timeit(a, number=1000000)  ... 9.87823104858  >>>   >>> dis(a)    5          0 LOAD_GLOBAL              0 (range)                3 LOAD_CONST              1 (50)                6 LOAD_CONST              2 (-20)                9 LOAD_CONST              3 (-2)              12 CALL_FUNCTION            3              15 STORE_FAST              0 (l)       6          18 BUILD_MAP                0              21 STORE_FAST              1 (d)       7          24 SETUP_LOOP              46 (to 73)              27 LOAD_GLOBAL              1 (enumerate)              30 LOAD_FAST                0 (l)              33 CALL_FUNCTION            1              36 GET_ITER                      >>  37 FOR_ITER                32 (to 72)              40 UNPACK_SEQUENCE          2              43 STORE_FAST              2 (p)              46 STORE_FAST              3 (v)       8          49 LOAD_FAST                1 (d)              52 LOAD_ATTR                2 (update)              55 BUILD_MAP                1              58 LOAD_FAST                3 (v)              61 LOAD_FAST                2 (p)              64 STORE_MAP                        65 CALL_FUNCTION            1              68 POP_TOP                          69 JUMP_ABSOLUTE          37          >>  72 POP_BLOCK                 9    >>  73 LOAD_FAST                1 (d)              76 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 19</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = 1      if a == 1 or a == 2 or a == 3:          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.100009918213  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 LOAD_CONST              1 (1)              12 COMPARE_OP              2 (==)              15 POP_JUMP_IF_TRUE        42              18 LOAD_FAST                0 (a)              21 LOAD_CONST              2 (2)              24 COMPARE_OP              2 (==)              27 POP_JUMP_IF_TRUE        42              30 LOAD_FAST                0 (a)              33 LOAD_CONST              3 (3)              36 COMPARE_OP              2 (==)              39 POP_JUMP_IF_FALSE      46       7    >>  42 LOAD_GLOBAL              0 (True)              45 RETURN_VALUE               8    >>  46 LOAD_GLOBAL              1 (False)              49 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = 1      if a in (1, 2, 3):          return True      return False     >>>   >>> timeit(a, number=1000000)  ... 0.105048894882  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 STORE_FAST              0 (a)       6          6 LOAD_FAST                0 (a)                9 LOAD_CONST              4 ((1, 2, 3))              12 COMPARE_OP              6 (in)              15 POP_JUMP_IF_FALSE      22       7          18 LOAD_GLOBAL              0 (True)              21 RETURN_VALUE               8    >>  22 LOAD_GLOBAL              1 (False)              25 RETURN_VALUE             >>>         </code></pre>    <h2>测试用例 20</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python"><code>    <br/>  </code>  </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python"><code>    <br/>  </code>  </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python"><code>    <br/>  </code>  </code></pre>    <h2>测试用例 21</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      return ''.join(map(str, xrange(10)))     >>>   >>> timeit(a, number=1000000)  ... 1.28661704063  >>>   >>> dis(a)    5          0 LOAD_CONST              1 ('')                3 LOAD_ATTR                0 (join)                6 LOAD_GLOBAL              1 (map)                9 LOAD_GLOBAL              2 (str)              12 LOAD_GLOBAL              3 (xrange)              15 LOAD_CONST              2 (10)              18 CALL_FUNCTION            1              21 CALL_FUNCTION            2              24 CALL_FUNCTION            1              27 RETURN_VALUE             >>>         </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      return ''.join(map(str, range(10)))     >>>   >>> timeit(a, number=1000000)  ... 1.29610896111  >>>   >>> dis(a)    5          0 LOAD_CONST              1 ('')                3 LOAD_ATTR                0 (join)                6 LOAD_GLOBAL              1 (map)                9 LOAD_GLOBAL              2 (str)              12 LOAD_GLOBAL              3 (range)              15 LOAD_CONST              2 (10)              18 CALL_FUNCTION            1              21 CALL_FUNCTION            2              24 CALL_FUNCTION            1              27 RETURN_VALUE             >>>         </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      r = ''      for i in range(10):          r = '%s%s' % (r, str(i))      return r     >>>   >>> timeit(a, number=1000000)  ... 2.74961709976  >>>   >>> dis(a)    5          0 LOAD_CONST              1 ('')                3 STORE_FAST              0 (r)       6          6 SETUP_LOOP              42 (to 51)                9 LOAD_GLOBAL              0 (range)              12 LOAD_CONST              2 (10)              15 CALL_FUNCTION            1              18 GET_ITER                      >>  19 FOR_ITER                28 (to 50)              22 STORE_FAST              1 (i)       7          25 LOAD_CONST              3 ('%s%s')              28 LOAD_FAST                0 (r)              31 LOAD_GLOBAL              1 (str)              34 LOAD_FAST                1 (i)              37 CALL_FUNCTION            1              40 BUILD_TUPLE              2              43 BINARY_MODULO                    44 STORE_FAST              0 (r)              47 JUMP_ABSOLUTE          19          >>  50 POP_BLOCK                 8    >>  51 LOAD_FAST                0 (r)              54 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 22</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a(n=25):      a, b = 0, 1      for i in range(n):          x = a + b          a = b          b = x      return a     >>>   >>> timeit(a, number=1000000)  ... 1.34775996208  >>>   >>> dis(a)    5          0 LOAD_CONST              3 ((0, 1))                3 UNPACK_SEQUENCE          2                6 STORE_FAST              1 (a)                9 STORE_FAST              2 (b)       6          12 SETUP_LOOP              42 (to 57)              15 LOAD_GLOBAL              0 (range)              18 LOAD_FAST                0 (n)              21 CALL_FUNCTION            1              24 GET_ITER                      >>  25 FOR_ITER                28 (to 56)              28 STORE_FAST              3 (i)       7          31 LOAD_FAST                1 (a)              34 LOAD_FAST                2 (b)              37 BINARY_ADD                        38 STORE_FAST              4 (x)       8          41 LOAD_FAST                2 (b)              44 STORE_FAST              1 (a)       9          47 LOAD_FAST                4 (x)              50 STORE_FAST              2 (b)              53 JUMP_ABSOLUTE          25          >>  56 POP_BLOCK                10    >>  57 LOAD_FAST                1 (a)              60 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a(n=25):      a, b = 0, 1      for i in range(n):          a, b = b, a + b      return a     >>>   >>> timeit(a, number=1000000)  ... 1.46058106422  >>>   >>> dis(a)    5          0 LOAD_CONST              3 ((0, 1))                3 UNPACK_SEQUENCE          2                6 STORE_FAST              1 (a)                9 STORE_FAST              2 (b)       6          12 SETUP_LOOP              37 (to 52)              15 LOAD_GLOBAL              0 (range)              18 LOAD_FAST                0 (n)              21 CALL_FUNCTION            1              24 GET_ITER                      >>  25 FOR_ITER                23 (to 51)              28 STORE_FAST              3 (i)       7          31 LOAD_FAST                2 (b)              34 LOAD_FAST                1 (a)              37 LOAD_FAST                2 (b)              40 BINARY_ADD                        41 ROT_TWO                          42 STORE_FAST              1 (a)              45 STORE_FAST              2 (b)              48 JUMP_ABSOLUTE          25          >>  51 POP_BLOCK                 8    >>  52 LOAD_FAST                1 (a)              55 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 23</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      x, y, z, w, k = 0, 0, 0, 0, 0      return x, y, z, w, k     >>>   >>> timeit(a, number=1000000)  ... 0.168544054031  >>>   >>> dis(a)    5          0 LOAD_CONST              2 ((0, 0, 0, 0, 0))                3 UNPACK_SEQUENCE          5                6 STORE_FAST              0 (x)                9 STORE_FAST              1 (y)              12 STORE_FAST              2 (z)              15 STORE_FAST              3 (w)              18 STORE_FAST              4 (k)       6          21 LOAD_FAST                0 (x)              24 LOAD_FAST                1 (y)              27 LOAD_FAST                2 (z)              30 LOAD_FAST                3 (w)              33 LOAD_FAST                4 (k)              36 BUILD_TUPLE              5              39 RETURN_VALUE             >>>      </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      x = 0      y = 0      z = 0      w = 0      k = 0      return x, y, z, w, k     >>>   >>> timeit(a, number=1000000)  ... 0.174968957901  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (0)                3 STORE_FAST              0 (x)       6          6 LOAD_CONST              1 (0)                9 STORE_FAST              1 (y)       7          12 LOAD_CONST              1 (0)              15 STORE_FAST              2 (z)       8          18 LOAD_CONST              1 (0)              21 STORE_FAST              3 (w)       9          24 LOAD_CONST              1 (0)              27 STORE_FAST              4 (k)      10          30 LOAD_FAST                0 (x)              33 LOAD_FAST                1 (y)              36 LOAD_FAST                2 (z)              39 LOAD_FAST                3 (w)              42 LOAD_FAST                4 (k)              45 BUILD_TUPLE              5              48 RETURN_VALUE             >>>      </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      x = y = z = w = k = 0      return x, y, z, w, k     >>>   >>> timeit(a, number=1000000)  ... 0.205312013626  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (0)                3 DUP_TOP                            4 STORE_FAST              0 (x)                7 DUP_TOP                            8 STORE_FAST              1 (y)              11 DUP_TOP                          12 STORE_FAST              2 (z)              15 DUP_TOP                          16 STORE_FAST              3 (w)              19 STORE_FAST              4 (k)       6          22 LOAD_FAST                0 (x)              25 LOAD_FAST                1 (y)              28 LOAD_FAST                2 (z)              31 LOAD_FAST                3 (w)              34 LOAD_FAST                4 (k)              37 BUILD_TUPLE              5              40 RETURN_VALUE             >>>      </code></pre>    <h2>测试用例 24</h2>    <p>更快的方式:</p>    <pre>  <code class="language-python">def a():      a = [[1, 2, 3], [2, 3, 4], [4, 5, 6]]      b = {k: v for x, k, v in a}      return b     >>>   >>> timeit(a, number=1000000)  ... 0.717478990555  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 LOAD_CONST              2 (2)                6 LOAD_CONST              3 (3)                9 BUILD_LIST              3              12 LOAD_CONST              2 (2)              15 LOAD_CONST              3 (3)              18 LOAD_CONST              4 (4)              21 BUILD_LIST              3              24 LOAD_CONST              4 (4)              27 LOAD_CONST              5 (5)              30 LOAD_CONST              6 (6)              33 BUILD_LIST              3              36 BUILD_LIST              3              39 STORE_FAST              0 (a)       6          42 LOAD_CONST              7 (<code> at 0x7f9e6e6b94b0, file "/tmp/__pfw_test24_t3.py", line 6>)              45 MAKE_FUNCTION            0              48 LOAD_FAST                0 (a)              51 GET_ITER                          52 CALL_FUNCTION            1              55 STORE_FAST              1 (b)       7          58 LOAD_FAST                1 (b)              61 RETURN_VALUE             >>>   </code>  </code></pre>    <p>更慢的方式:</p>    <pre>  <code class="language-python">def a():      a = [[1, 2, 3], [2, 3, 4], [4, 5, 6]]      b = {x[1]: x[2] for x in a}      return b     >>>   >>> timeit(a, number=1000000)  ... 0.744184017181  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 LOAD_CONST              2 (2)                6 LOAD_CONST              3 (3)                9 BUILD_LIST              3              12 LOAD_CONST              2 (2)              15 LOAD_CONST              3 (3)              18 LOAD_CONST              4 (4)              21 BUILD_LIST              3              24 LOAD_CONST              4 (4)              27 LOAD_CONST              5 (5)              30 LOAD_CONST              6 (6)              33 BUILD_LIST              3              36 BUILD_LIST              3              39 STORE_FAST              0 (a)       6          42 LOAD_CONST              7 (<code> at 0x7fcc514754b0, file "/tmp/__pfw_test24_t1.py", line 6>)              45 MAKE_FUNCTION            0              48 LOAD_FAST                0 (a)              51 GET_ITER                          52 CALL_FUNCTION            1              55 STORE_FAST              1 (b)       7          58 LOAD_FAST                1 (b)              61 RETURN_VALUE             >>>   </code>  </code></pre>    <p>最慢的方式:</p>    <pre>  <code class="language-python">def a():      a = [[1, 2, 3], [2, 3, 4], [4, 5, 6]]      b = dict((x, y)for w, x, y in a)      return b     >>>   >>> timeit(a, number=1000000)  ... 1.32197403908  >>>   >>> dis(a)    5          0 LOAD_CONST              1 (1)                3 LOAD_CONST              2 (2)                6 LOAD_CONST              3 (3)                9 BUILD_LIST              3              12 LOAD_CONST              2 (2)              15 LOAD_CONST              3 (3)              18 LOAD_CONST              4 (4)              21 BUILD_LIST              3              24 LOAD_CONST              4 (4)              27 LOAD_CONST              5 (5)              30 LOAD_CONST              6 (6)              33 BUILD_LIST              3              36 BUILD_LIST              3              39 STORE_FAST              0 (a)       6          42 LOAD_GLOBAL              0 (dict)              45 LOAD_CONST              7 (<code> at 0x7f5ea06174b0, file "/tmp/__pfw_test24_t2.py", line 6>)              48 MAKE_FUNCTION            0              51 LOAD_FAST                0 (a)              54 GET_ITER                          55 CALL_FUNCTION            1              58 CALL_FUNCTION            1              61 STORE_FAST              1 (b)       7          64 LOAD_FAST                1 (b)              67 RETURN_VALUE             >>>   </code>  </code></pre>    <p> </p>    <p>来自:http://python.jobbole.com/86545/</p>    <p> </p>    
 本文由用户 834792890 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1475468675374.html
Python 测试技术 Python开发