前言:
self对于迭代器、生成器、列表解析等的理解远远没有进入化境,这是一个不断进步的过程,体系很混乱,想哪说哪。
正文
可迭代对象及对其的列表解析、迭代器迭代是python的一个重要特色、也是它所想强调的一点。
使用优势
使用迭代器迭代因为每次只返回对象的一个元素,因此可以有效地节省内存
同时 迭代器迭代和列表解析 都可以比for 结果的循环有大约两倍的速度性能的提升,当然代码会显得更紧凑。
总结几个常见的内置迭代器
- range(3.x,对于2.x相当于已消失的xrange)
range(0:up=value0:step=1) #默认从0开始,默认步进为1
#(步进为第三个参数)至少需要传入value0作为上限(上限到不了)。 - zip 并行遍历,并且返回一个可迭代对象。
zip(s1,s2) #s1,s2 可以是任何序列化的对象(不是序列化的诸# 如字典也可以,但往往无意义)。 - map 迭代函数映射
map(function,*arg)
返回可迭代对象。 - filter 迭代过滤
filter(function,*arg)
只保留符合function条件的值 返回可迭代对象。 - yield
def gensquaures(x):
for i in range(x):
yield i**2
- enumerate产生偏移和元素
s='abcdef'
for (offset,item) in enumerate(s):
pass
yield表达式 将对象转换为可迭代对象(只能在函数内部使用)
迭代对象生成器
s=iter(s)
#s 为要产生迭代的对象
手动迭代
next(s)
(python 3.x, 2.6later)
s.__next__()
(python 3.x)
s.next()
(python 2.x)
文件是自己的迭代器
file=open('e:\mytext','r')
for line in file.readlines():
print line
其他的内置迭代类型
dict.keys();dict.values();dict.items()都是可迭代对象
列表解析
L=[1,2,3,4,5,6]
L=[i**2 for i in L]