python迭代器与生成器

一.迭代器总结

1. 迭代器主要就是一个迭代取值,另外一种就是索引(下标)取值。

l1 = [1, 2, 3, 4, 6]
##选择迭代对象
res = l1.__iter__()
print(res.__next__())  # 1
print(res.__next__())  # 2
print(res.__next__())  # 3
print(res.__next__())  # 4

2. 迭代取值与索引取值的区别

迭代取值: 1 .迭代取值不可以重复取值。 2. 可以在不使用索引(下标)取值下进行取值。

索引取值 :   1 .索引取值可以重复取值。2. 索引取值(l1[0])必须要有容器。

二 .生成器

1.关键字:yeild

当函数中出现了yeild,如果没有调用,那就是普通的函数,如果被调用他就是个生成器,当函数调用执行到 yeild时,则会停住。调用时会变成元组形式返回

def index():
    print('form index')
    print('form index')
    print('form index')
    print('form index')

    yield 123
    print('form 111')

res = index()
print(res.__next__())

利用生成器实现range功能:

def my_range(start, stop=None, step=1):
    if not stop:
        sopt = start

        start = 0
    while start > stop:

        yield start
        start += step

for i in range(10):
    print(i)
2.生成器yeild的其他用法
def eater(name):
    print('%s: 正在吃' % name)
    while True:
        food = yield '苹果'
        print('%s: 正在吃 %s'% (name,food))
res = eater('jerry')
res.__next__()
res.send('鸡翅')

关键字 send

send既可以在yeild后面直接传,还可以直接执行__next__。

3. 生成器表达式

如果不使用数据就不会提供,目的就是为了节省内存空间。


l1 = ['kevin', 'jerry', 'tony', 'oscar']
l2 = []


res = (l1 for l1 in l2)
print(res)

res1 = (l1 for l1 in l1)
print(res1)
print(res1.__next__())
print(res1.__next__())
print(res1.__next__())
print(res1.__next__())

4.yeild 和 return 的区别

yeild:当函数执行到yeild时,会停住,yeild后面可以有多个返回值,使用元组形式返回(),yeild可以把函数变成生成器。

return当函数执行到return时,会直接停止,也有多个返回值,元组形式返回。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值