python迭代器和解析
2014-04-22 18:49
363 查看
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__()) #输出:0 print(next(G)) #输出:1 print(next(G)) #输出:4 2、生成器函数和生成器表达式都是单迭代器对象 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 res def 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 res 4、对迭代的各种方法进行计时 #file mytimer.py 计时文件 import time reps = 1000 replist = range(reps) def timer(func , *pargs,**kargs): start = time.clock() for i in replist: ret = func(*pargs,**kargs) elapse = time.clock-start return (elapse,ret) #file timeseqs.py 测试文件 import sys,mytimer reps = 1000 repslist = range(reps) def forLoop(): #for循环 res = [] for x in repslist: res.append(abs(x)) return res def 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循环
相关文章推荐
- python中迭代器、列表解析、生成器的分析比较
- Python中的迭代器与生成器高级用法解析
- 第29课 Python中for循环体与文件(迭代器解析)
- 《Python 学习手册4th》 第十四章 迭代器和解析
- python 迭代器和解析
- python 可迭代对象之(列表解析,迭代器迭代) =>持续更新
- python学习手册笔记--第14.20章--迭代器和解析
- 举例讲解Python中的迭代器、生成器与列表解析用法
- 【Python学习】python学习手册--第十四章 迭代器和解析 第一部分
- Python笔记(五)迭代器和解析
- Python内置容器(2)——字典,迭代器,列表解析
- Python——迭代器和解析(2)
- Python基础02--迭代器、生成器、列表解析
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- 解析Python中的生成器及其与迭代器的差异
- python:迭代器和列表解析
- Python——迭代器和解析(3)
- Python比较for循环、列表解析、迭代器、map之间运算时间关系
- Python 三目运算,列表解析,装饰器,迭代器和生成器
- Python——迭代器和解析(1)