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)

Original: https://www.cnblogs.com/tangyuanzi/p/16649545.html
Author: 发烧的汤圆
Title: python 生成器与迭代器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/809336/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球