python迭代器生成器

  • 可迭代对象
    对象内部含有__iter__ 方法,(dir())可迭代对象满足可迭代协议
  • 迭代器
    对象内部含有__iter__和__next__方法
  • 生成器
    自己用python代码写的迭代器,本质是迭代器,
    方法:1 ,iter(可迭代对象), 2, 用yield写函数,此时该函数不是通常意义的函数,而是个生成器。
  • yield
    用在特殊的函数体内,这个函数体仅仅是用来创建一个genetator生成器函数
    例1
def f():
    print('ok')
    yield 6
    print('ok2')
    yield
gen = f()  # 通常执行函数时开辟了一个临时空间,直接执行函数内的代码块,而加了yield后就生产了一个generator对象,并非通常意义的函数了。
print(gen)  # 该生成器地址 # <generator object f at 0x0000015B8052F6D8>
'''生成器取值方法'''
print(next(gen))  # ok 6 # 调用者可接收yield返回值
print(gen.__next__())  # ok2  None
next(gen)  # StopIteration

在这里插入图片描述

  • send
    next方法只能在迭代器内查看其中的内容,如果想和迭代器交互,如传一个值给他,就要用到send,如
def f():
    print('ok')
    s = yield 6
    print(s)
    print('ok2')
    yield

gen = f()  # 同样调用生成器取值
print(next(gen))
gen.send(5)  # 把5 send给了上一个yield,再走下面的代码,也相当于走了两遍。也就是既走next,又给上一个yield传值。

运行结果

ok
6
5
ok2

在这里插入图片描述

  • yield from和 yield区别 :yield from 是3.5后的新功能。
    yield from 调用了另外的函数

def func():
    yield from 'kdjff'
print(list(func()))

def func():
    for i in 'kdfj':
        yield i

print(list(func()))

运行结果

['k', 'd', 'j', 'f', 'f']
['k', 'd', 'f', 'j']
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值