注:个人学习记录用。建议大家看原文,原文对比更加清晰,一目了然。
注:各位要使用这些技巧的话,请在自己的服务器上测试一遍,并且加大测试的数值,目前的用例都是 10 W 次,我们可以测试 100 W , 1000 W 次。。。。
注:如果测试的性能相差不多,请以可读性为主。
运行测试的平台环境:
| 12345678910111213 | >>> import sys>>> import platform>>> 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]\’>>> from timeit import timeit>>> from dis import dis>>> |
以下的代码主要是使用了 timeit 函数测试处理时间,以及使用 dis 函数显示详细的处理步骤(汇编的方式),能让你清楚的知道,慢在哪里?为什么慢?
更快的方式:
| 1234567891011121314151617 | 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 >>> |
更慢的方式:
| 12345678910111213141516171819 | 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 >>> |
更快的方式:
| 123456789101112131415161718192021222324252627282930313233 | 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 >>> |
更慢的方式:
| 123456789101112131415161718192021222324252627282930 | 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 >>> |
更快的方式:
| 1234567891011121314151617181920212223242526272829303132333435363738 | def a(): |