1、迭代器
可迭代对象:内部含有__iter__方法的就是可迭代对象
可迭代对象不能取值,因为内部不含有__next__方法
可迭代对象--》迭代器 :obj.__iter__(),iter(obj)
迭代器:内部含有__iter,__next__方法的对象
迭代器的优点:1,节省内存
2,惰性机制
3,单向,不可逆
如何判断可迭代对象,迭代器?
1,有没有__iter__方法 dir()方法
2,isinstance(对象,lterable)方法
l1 = [1, 2, 3]
from collections import Iterable
from collections import Iterator
print(isinstance(l1,Iterable))
print(isinstance(l1,Iterator))
print(isinstance(l1,list))
2、生成器
解释:自己用python代码写的迭代器就是生成器, 生成器的本身就是迭代器
函数中如果出现了yield,这个函数就是生成器函数
这个时候执行函数,获取到生成器。
使用__next__()执行到下一个yield,send()也有这个功能
区别:
__next__()方法不能赋值
send()可以赋值,在执行send()之前执行__next__()
生成器的优点:
节省内存。
列表推导式:
优点:节省代码,一行搞定 缺点:不好排错。
注:凡是用列表推导式构造的列表对象,用其他方式都可构建.,非常复杂的列表,列表推导式是构建不出的,
循环模式: [变量(加工后的变量) for 变量 in iterable]
列如:l2 = [i for i in range(1, 14)]
筛选模式: [变量(加工后的变量) for 变量 in iterable if 条件]
列如:l1 = [i for i in range(1, 31) if i % 3 == 0]
生成器表达式
循环模式 g_obj = ('python%s期' % i for i in range(1,14))
筛选模式 g_obj1 = ('python%s期' % i for i in range(1,14) if i % 2 == 0)
取数:print(g_obj.__next__())
或者:
for i in g_obj1:
print(i)