015 Python语法之迭代器与生成器

本文介绍了Python中的迭代器和生成器,强调了它们在节省内存和实现惰性计算中的作用。迭代器是可被next()函数调用并返回序列的对象,可通过iter()函数转换。生成器通过yield关键字实现,允许在运行时生成序列。此外,还讨论了send()函数以及生成器在生产者消费者模式中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器

  1. 可用于集合,列表,元组,字典,字符串
  2. 可以用于节省内存,用完一个数据就可以del掉
  3. 可循环的对象统称为:Iterable
  4. 可被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator
  5. 可以用iter(a)将 a 变成一个迭代器
  6. iterator是一个数据流,可被next,没有提前创建控件,是一个惰性的计算
  7. 凡是可作用于for循环的都是Iterable类型
  8. 凡是可作用于next函数的对象都是Iterator,它们表示一个惰性的计算序列
  9. 3.x range()本质是一个迭代器

迭代器函数:iter(序列) next(迭代器)

str1 = "12345"
it = iter(str1)

遍历方式1:
for i in it:
    print(i)

遍历方式2:
while True:
    try:
        print(next(it))
    except StopIteration:
        break
        sys.exit()

生成器函数与yield关键字

def iteration():
    for i in range(10):
        yield i

it = iteration()
it 是一个生成的迭代器,可用上面的方式进行迭代

send() 函数

def iteration():
    for i in range(10):
        x = yield i
        i = x + i
        
it = iteration()
it.send(None)
it.send(1)

生产者消费者模式

import time

def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield

       print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

c = consumer("ChenRonghua")
c.__next__()

# b1= "韭菜馅"
# c.send(b1)
# c.__next__()

def producer(name):
    c = consumer('A')
    c2 = consumer('B')
    c.__next__()
    c2.__next__()
    print("开始做包子了!")
    for i in range(10):
        time.sleep(1)
        print("做了1个包子,分两半!")
        c.send(i)
        c2.send(i)

producer("alex")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆豆orz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值