python迭代工具自動調(diào)用迭代對象next方法,對迭代對象進行遍歷。
python的for循環(huán)、列表解析、map方法、生成器表達式、生成器方法都是迭代工具。
python可迭代對象包括:字符串、列表、元組、字典、集合、range、enumerate、文件等。
1.1 python迭代調(diào)用內(nèi)置函數(shù)計時比較
描述
timetool.py:計時模塊,循環(huán)調(diào)用func函數(shù)1000次,返回使用時間和最后一次調(diào)用結(jié)果。
time.perf_counter():返回性能計數(shù)器的值,單位為秒。兩次調(diào)用之間的差值用于計時。
timeiterenv.py:各種迭代環(huán)境調(diào)用內(nèi)置函數(shù)ord(),返回列表。對各種迭代函數(shù)調(diào)用計時模塊的計時函數(shù)進行計時,將計時結(jié)果存放在列表,并且按從低到高的順序?qū)τ嫊r結(jié)果進行排序。
sorted():key = lambda x:x[1],按自定義鍵函數(shù)進行排序,x為sorted的第1個參數(shù)對應排序?qū)ο螅瑇[1]表示按第1個索引值進行排序,本例中對應函數(shù)計時結(jié)果。
通過例子得出:迭代環(huán)境調(diào)用內(nèi)置函數(shù)耗時從低到高的順序為:
| NO | 函數(shù) | 描述 | 
|---|---|---|
| 1 | mapCall | map迭代工具 | 
| 2 | listComp | 列表解析 | 
| 3 | genFunc | 生成器函數(shù) | 
| 4 | genExpr | 生成器表達式 | 
| 5 | forloop | for循環(huán) | 
示例
# timetool.py
import time
reps = 1000
repslist = range(reps)
def timer(func,*pargs,**kargs):
   begin = time.perf_counter()
   for i in repslist:
       ret = func(*pargs,**kargs)
   usetime = time.perf_counter() - begin
   return (usetime,ret)
# timeiterenv.py
import sys,timertool
s = '梯閱線條tyxt'*1000
def forloop():
   res = []
   for x in s:
       res.append(ord(x))
   return res
   
def listComp():
   return [ord(x) for x in s]
def mapCall():
   return list(map(ord,s))
   
def genExpr():
   return list(ord(x) for x in s)
   
def genFunc():
   def gen():
       for x in s:
           yield ord(x)
   return list(gen())
   
print(sys.version)
reslist=[]
for test in (forloop,listComp,mapCall,genExpr,genFunc):
   usetime,result = timertool.timer(test)
   reslist.append((test.__name__,usetime,result[0],result[-1],len(result)))
print('-'*33)        
reslistsort=sorted(reslist,key = lambda x:x[1])
for L in reslistsort:
   print('%-9s:%.5f=>[%s....%s....%s]'%(L[0],L[1],L[2],L[3],L[4]))
print('-'*33)
# 迭代調(diào)用內(nèi)置函數(shù)計時比較結(jié)果
# 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)]
# ---------------------------------
# mapCall :0.20925=>[26799....116....8000]
# listComp :0.42197=>[26799....116....8000]
# genFunc :0.57103=>[26799....116....8000]
# genExpr :0.57259=>[26799....116....8000]
# forloop :0.66177=>[26799....116....8000]
# ---------------------------------
1.2 python迭代調(diào)用用戶函數(shù)計時比較
描述
python各種迭代環(huán)境調(diào)用用戶函數(shù)ord(x)+1,進行計時比較。
timertool.py不變,修改timeiterevn.py即可。
通過例子得出:迭代環(huán)境調(diào)用用戶函數(shù)耗時從低到高的順序為:
| NO | 函數(shù) | 描述 | 
|---|---|---|
| 1 | listComp | 列表解析 | 
| 2 | genExpr | 生成器表達式 | 
| 3 | genFunc | 生成器函數(shù) | 
| 4 | forloop | for循環(huán) | 
| 5 | mapCall | map迭代工具 | 
示例
# timeiterevn.py
import sys,timertool
s = '梯閱線條tyxt'*1000
def forloop():
   res = []
   for x in s:
       res.append(ord(x)+1)
   return res
   
def listComp():
   return [ord(x) for x in s]
def mapCall():
   return list(map(lambda x:ord(x)+1,s))
   
def genExpr():
   return list(ord(x)+1 for x in s)
   
def genFunc():
   def gen():
       for x in s:
           yield ord(x)+1
   return list(gen())
commstr = '# '
print(commstr+str(sys.version))
reslist=[]
for test in (forloop,listComp,mapCall,genExpr,genFunc):
   usetime,result = timertool.timer(test)
   reslist.append((test.__name__,usetime,result[0],result[-1],len(result)))
print(commstr+'-'*33)        
reslistsort=sorted(reslist,key = lambda x:x[1])
for L in reslistsort:
   print(commstr+'%-9s:%.5f=>[%s....%s....%s]'%(L[0],L[1],L[2],L[3],L[4]))
print(commstr+'-'*33)
# 調(diào)用用戶函數(shù)計時比較結(jié)果
# 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)]
# ---------------------------------
# listComp :0.50272=>[26799....116....8000]
# genExpr :0.83316=>[26800....117....8000]
# genFunc :0.85477=>[26800....117....8000]
# forloop :0.94426=>[26800....117....8000]
# mapCall :0.96591=>[26800....117....8000]
# ---------------------------------
- 
                                生成器
                                +關注
關注
7文章
322瀏覽量
22457 - 
                                python
                                +關注
關注
56文章
4850瀏覽量
89313 - 
                                for循環(huán)
                                +關注
關注
0文章
61瀏覽量
2841 
發(fā)布評論請先 登錄
一文詳解python調(diào)用函數(shù)
快速掌握Python的遞歸函數(shù)與匿名函數(shù)調(diào)用
python迭代器
python的內(nèi)置函數(shù)詳細資料概述
python的常用函數(shù)有哪些
    
          
        
        
python迭代調(diào)用內(nèi)置函數(shù)計時比較(上)
                
 
           
            
            
                
            
評論