python 幾種循環性能測試: while, for, 列表生成式, map等


  直接上代碼:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2018/07/24 16:23
 4 
 5 import itertools
 6 import sys
 7 import time
 8 
 9 reps = 1000  # 測試重復次數
10 nums = 20000  # 測試時數字大小
11 
12 
13 def tester(func, *args):  # 總體測試函數
14     start_time = time.time()
15     for i in xrange(reps):
16         func(*args)
17     elapsed = time.time() - start_time  # 用time模塊來測試,結束時間與開始時間差
18     return elapsed
19 
20 
21 def while_statement():  # while循環實現
22     res = []
23     x = 0
24     while nums > x:
25         x += 1
26         res.append(abs(x))
27 
28 
29 def for_statement():  # for循環實現
30     res = []
31     for x in xrange(nums):
32         res.append(abs(x))
33 
34 
35 def generator_expression():  # 生成器實現
36     res = list(abs(x) for x in xrange(nums))
37 
38 
39 def list_comprehension():  # 列表生成式實現
40     res = [100]
41     res += [abs(x) for x in xrange(nums)]
42 
43 
44 def map_function():  # 內置函數map實現
45     res = [100]
46     res += map(abs, xrange(nums))
47 
48 
49 def map_function2():  # 內置函數map實現
50     res = [100]
51     res.extend(map(abs, xrange(nums)))
52 
53 
54 def map_function3():  # 內置函數map實現
55     res = [100]
56     itertools.chain(res, map(abs, xrange(nums)))
57 
58 
59 if __name__ == '__main__':
60     print sys.version  # 打印系統版本
61     tests = [
62         while_statement, for_statement,
63         generator_expression, list_comprehension,
64         map_function, map_function2,
65         map_function3
66     ]
67     for test_func in tests:  # 將待測函數放置列表中依次遍歷
68         print test_func.__name__.ljust(20), ': ', tester(test_func)  #

 

結果如下:

1 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]
2 while_statement      :  2.53600001335
3 for_statement        :  1.93700003624
4 generator_expression :  1.3639998436
5 list_comprehension   :  1.06500005722
6 map_function         :  0.90499997139
7 map_function2        :  0.899000167847
8 map_function3        :  0.824999809265

 

結論:

1)耗時:while > for > 列表生成式 > map函數;

2)連接list時,itertools的chain對象比直接+或者extand要快。

3)另外,以上range均使用xrange,相比range返回列表,xrange返回iterator, 實際測試表明,xrange比range快。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM