迭代:
list有下标,可以进行迭代,但是只要是可迭代对象,无论有无下标,都是可以进行迭代的
1 :
比如 dict就可以进行迭代:
d = {'d'=:1, 'b'=2}
for key in d:
print key
由于dict的存储不是按照list的方法顺序排列的,所以,迭代出来的结果顺序很可能不一样。
默认情况下,dict迭代的是key,如果要迭代value,可以用 for value in d.itervalues(),如果要同时迭代key和value可以用for k,v in d.iteritems()
2:由于字符串也是可迭代对象,因此也是可以用作for循环的
3:如何判断对象是一个可迭代对象?使用collection模块中的iterable类型
比如:
from collection import iterable
isinstance('abc',Iterable)
返回:True
isinstance (123,Iterable)
返回: False
生成器:
列表生成,由于受到内存限制,列表容量有限,我们可以通过某种算法来推出列表元素,而不用创建完整的list
这种机制就叫做生成器(generator)
创建generator的方法:
1,将列表生成式的[]改为()
L=[x*x for x in range(10)]
改为:g = (x*x for x in range(10))
打印generator :
g = (x*x for x in range(10))
for n in g:
print n
2,将函数内的print改为yield,如果一个函数定义中包含yield关键字,那么这个函数就不是一个普通函数而是一个generator
3,generator与普通函数的执行流程不同:函数时顺序执行,遇到return或者最后一行函数语句就返回,而generator是遇到yield就返回,再次执行就从上次返回的yield语句处继续执行