迭代器 生成器

来源:互联网 发布:剑灵龙族男捏脸数据 编辑:程序博客网 时间:2024/05/20 16:14
迭代:
    1 重复
    2 下一次重复是基于上一次的结果

迭代器的优点
1:提供了一种不依赖于索引的取值方式
2:惰性计算。节省内存

迭代器的缺点:
1:取值不如按照索引取值方便
2:一次性的。只能往后走不能往前退
3:无法获取长度

可迭代的对象:
含有内置函数__iter__()方法

可迭代的对象:列表、元组、字典、集合等

迭代器:

含有内置函数__iter__()方法 和 __next__()方法

l=["a","b",3,4]g=iter(l) #返回迭代器  少用g=l__iter__()和g.__next__()print(g) print(next(g))print(next(g))print(next(g))输出:<list_iterator object at 0x0000000001DBA6D8>ab3

str1="hello GGG"         #isinstance()    
print(isinstance(str1,Iterable))#查看str1是否可迭代对象
print(isinstance(str1,Iterator))#查看str1是否迭代器


生成器 Generator

本质就是一个迭代器,函数里有yield ,该函数就是生成器

def fun():   y =1   while True:      x = yield y         print(x)      y+=1g = fun()    #fun就是生成器print(g)     print(next(g))   print(g.send("luo"))输出:<generator object fun at 0x0000000001DE2D00>    #print(g)1  # print(next(g)) luo              # fun()函数中 print(x)2 # print(g.send("luo"))

#next()执行代码遇到yield就停止,并接收yield返回的值   
#send() 第一:传值给yield  第二:next()

#print(next(g))--执行遇到yield停止,接收yield返回的值
#g.send("luo")--先把“luo”传给yield,在接收yield返回的 y
#yield  第一:接收值  第二:返回值(默认返回None)


python3.x

yield from [1,2,3,4] 或者"asdfg"
每次next()返回其中一个值
1 2 3 4 5
a s d f g

原创粉丝点击