python迭代器和解析
生活随笔
收集整理的這篇文章主要介紹了
python迭代器和解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、類表解析列表解析可以編寫任意數量的瞧他的for循環,并且每一個都有可選的if測試,結構如下:[expression for target1 in iterable1 [if condition1]for target2 in iterable2 [if condition2]for target3 in iterable3 [if condition3]...for targetN in iteratbleN [if condtionN]]例如:[x+y+z for x in [0,1,2] for y in [100,200,300]for z in [-1,-2,-3] if z >0]
2、列表解析的速度>map的速度>for的速度
3、如果一個函數含有yield,則這個函數支持迭代器,在for循環中,如果對象支持迭代協議,則使用迭代協議遍歷對象,如果對象不支持迭代協議,則通過索引來遍歷對象
4、生成器函數的應用例如:def gensquares(N):for i in range(N):yield i**2
1、生成器表達式生成器表達式同列表解析式一樣,只是外面的括號換成了圓括號,而不是方括號。這個表達式返回迭代器。例如:G = (x**2 for x in range(5))print(G.__next__()) #輸出:0print(next(G)) #輸出:1print(next(G)) #輸出:42、生成器函數和生成器表達式都是單迭代器對象3、使用迭代工具模擬zip和map例如:def mymap(func,*args):for arg in zip(*args):yield func(*arg)或者:def mymap(func,*args):return (func(*arg) for arg in zip(*args))def myzip(*seqs):seqs = [list(s) for s in seqs]res = []for all(seqs):res.append(tuple(s.pop(0) for s in seqs))return resdef myzip(*seqs,pad = None):seqs = [list(s) for s in seqs]res = []for any(seqs):res.append(tuple((s.pop(0) if s else pad) for s in seqs))return res4、對迭代的各種方法進行計時#file mytimer.py 計時文件import timereps = 1000replist = range(reps)def timer(func , *pargs,**kargs):start = time.clock()for i in replist:ret = func(*pargs,**kargs)elapse = time.clock-startreturn (elapse,ret)#file timeseqs.py 測試文件import sys,mytimerreps = 1000repslist = range(reps)def forLoop(): #for循環res = []for x in repslist:res.append(abs(x))return resdef listcomp(): #列表解析return [abs(x) for x in repslist]def mapCall(): #map函數return list(map(abs,repslist))def genExpr(): #生成器表達式return list(abs for x in repslist)def genFunc():#生成器函數def gen():for x in repslist:yield abs(x)return list(gen())print(sys.version)for test in (forLoop,listcomp,mapCall,genExpr,genFunc):elapsed,result = mytimer.tester(test)print('-'*33)print('%-9s: %.5f =>[%s...%s] %(test.__name__,elapse,result[0],result[-1]))#通過測試可以得出,map速度〉列表解析 〉 生成器函數速度 〉生成器表達式〉for循環
轉載于:https://www.cnblogs.com/hbcb533/p/3681215.html
總結
以上是生活随笔為你收集整理的python迭代器和解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dos-目录
- 下一篇: python进阶八_警告和异常