python的生成器和迭代器

三、推倒式
从时间上比较:集合 字典 元祖 列表 (从小到大)
占用内存比较:字典 集合 列表 元祖 (从大到小)

字典是可进行hash操作,操作的是字典的key ,而对list进行hash操作的时候操作的是
list的值

1、列表推导式
例子:list =[i for i in rang(1,200)]
解释:
列表推导式就是简写了的for循环,代码更加简洁,for循环每遍历一次就往list
里面添加一个数据

2、字典推导式

把下列字符串使用字典推导式生成一个字典
cook_str='BIDUPSID=D0727533D7147B7;PSTM=1530348042; '
'BAIDUID=B1005C9BC2EB28; sugstore=0;'
'__cfduid=d0a13458f8ac2a;BD_UPN=12314353;'
'ispeed_lsm=2;BDORZ=B490B5EBF6F3CD402'

data = { item.split("=")[0]:item.split("=")[1] for item in cook_str.split(";")}
print(data)

3、生成器表达式

# 生成器表达式
# 生成器
# 生成器存储并不是具体的值,而是一个算法,通过next() 来进行取值
# 一次只能取一个,如果取完了再去取,就会抛出异常
# 一次只能取一个,如果取完了再去取,就会抛出异常
tu = (i for i in range(1,20)) # 生成器对象
print(next(tu)) # 取值
# 通过yield 指定生成器 生成器取值使用next() 函数
# next() 取值yield 一次取一个
def gen_fun():
yield 1
print("hhhh")
yield 100
res = gen_fun()
print(next(res))

四、迭代器和生成器
1、生成器
生成器并不会一下子把所有的数据全部导出来,生成器中保存的只是一个生成数据的
相关算法,并不会吧数据都生成出来,只是在我们需要数据的时候,用生成器去生成一条数据
就可以了

生成器比迭代器多了几种方法 send() close() throw()

生成器 < 迭代器 < 可迭代对象
2、迭代协议


3、迭代器

迭代器:在可迭代对象的基础上实现了 __iter__方法 还实现了 __next__方法

可迭代对象:可以进行for循环的就是一个可迭代对象 内部只实现了 __iter__方法

生成器也是迭代器的一种,都支持迭代操作 for循环

例子:
list = [1,2,3,4]
list1 = iter(list) # 使用iter()来转化成一个迭代器
print(next(list1)) # 使用next()方法取值

原文地址:https://www.cnblogs.com/666666pingzi/p/10841908.html