PYTHON学习之生成器,迭代器

1.生成器,迭代器,可迭代对象直接的关系:
容器(container)、可迭代对象(iterable)、迭代器(iterator)、生成器(generator)、列表/集合/字典推导式(list,set,dict comprehension)众多概念参杂在一起,难免让初学者一头雾水,我将用一篇文章试图将这些概念以及它们之间的关系捋清楚
在这里插入图片描述
2.生成器

生成器的两种定义方法
方式一:

a = (x*2 for x in range(5))
print(next(a))
print(next(a))
print(next(a))

方式二:

def fun():
    print('ok1')
    yield 1

    print('ok2')
    yield 2
g = fun()
print(g)#<generator object fun at 0x0000020596EBB3B8>
next(g)#ok1
next(g)#ok2

for i in fun():
    print(i)

'''
ok1
1
ok2
2

'''

执行顺序在这里插入图片描述

send方法
send跟yield唯一区别就是,send可以给yield前变量赋值,send前无next()时,需要传一个None

def fuc():
    print('ok1')
    con = yield 1
    print(con)

    yield 2

g = fuc()
g.send(None)#等于next(g)
g.send('aaa')
'''
ok1
aaa

'''

执行顺序
在这里插入图片描述
3。迭代器
生成器都是迭代器,迭代器不都是生成器
什么是迭代器
1.有iter方法
2.有next方法

a = [1,2,3]
#print(next(a))
'''
Traceback (most recent call last):
  File "D:/python_learn/生成器.py", line 49, in <module>
    print(next(a))
TypeError: 'list' object is not an iterator
'''
b = iter(a)
print(b)#<list_iterator object at 0x0000027AD357CDD8>
print(next(b))#1
print(next(b))#2

4.for的原理
for做了三件事情
1.调用可迭代对象的iter()方法,返回一个迭代器对象
2.不断调用迭代器对象的next方法
3.处理StopIteration
for i in [1,2,3]:
iter([1,2,3])

发布了49 篇原创文章 · 获赞 1 · 访问量 5551

猜你喜欢

转载自blog.csdn.net/weixin_44999591/article/details/105069432