python 生成器与迭代器,


生成器

生成器: 节省空间

# generator 生成器
f = [i for i in range(1,1001)] # 列表
f = (i for i in range(1,1001)) # 生成器

在创建列表是,会在内存中全部创建出来,而生成器不会全部创建出来,而是使用一个就创建一个,结束后会被当垃圾回收掉
# 垃圾回收机制 只要符合没有被对象引用,python就会自动清理内存
# 使用方法
f.__next__() # 魔法方法,尽量不用
next(f) # 与f.__next__相同

生成器的创建

1. (i for i in range(1,10))
2. yeld 关键字

def f(): # 生成器
    print("f1")
    yield 1 # 挂起(暂停)
    print("f2")
    yield 2 

g = f() # 使用时必须赋值给一个变量
next(g) # f1   
print(next(g)) # f2  2

迭代器

可迭代对象:

for i in 可迭代对象:
    print(i)
# 可以for循环的都是可迭代对象

# 内置有iter方法的就是可迭代对象

生成器其实就是迭代器

l = [i for i in range(1,10)]
li = l.__iter__() # 返回一个可迭代对象
li = iter(l) # 一般用这个
# 这里li就是迭代器  l就是可迭代对象

# 迭代器满足2个方法
1. 有iter方法
2. 有next方法

遍历原理:

li = ["a","b","c"]
for i in li:
    print(i) # 本质就是使用了迭代器原理 next来做到遍历
   
# 遍历的本质的将 可迭代类型,转为了迭代器
# 然后不断的 next() 将其元素,从头到尾全部输出

# 1. d = li.__iter__()
# 2. 不断 i = next(d)
# 3. print(i)

评论关闭