生成器
生成器: 节省空间
# 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)