python迭代器

博客主要介绍了Python中迭代器和生成器的相关知识。迭代器可被next()调用并不断返回下一个值,无结束限制,很多底层方法如for循环用其实现。生成器是一边循环一边计算的机制,还提及用迭代器求斐波那契数列及迭代器并行。

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

1.迭代器:可以被next()调用,并且不断返回下一个值的对象,称为迭代器
2.迭代器没有结束限制,只要next()有值,就一直计算,当没有值的时候,报错StopIteration,停止
3.很多底层方法都是使用迭代器实现,比如for循环

for x in [1,2,3,4,5]:
    pass

相当于

it = iter([1,2,3,4,5])
while True:
    try:
        x = next(it)
    except StopIteration:
        break
print(isinstance((),Iterator))

4.一边循环一遍计算的机制叫做生成器

b=[i*2 for i in range(10)]
print(b)
for i in b:
    print(i)
print(len(b))
print(b.__next__())

5.使用迭代器求斐波那契数列,没求和:

#求输入值得斐波那契数
def fib(max):
    n,a,b = 0,0,1
    while n<max:
        #print(b)
        yield b#yield使其成为迭代器
        a,b = b,a+b
        n = n+1
    return 'done'
#print(fib(10)),不使用迭代器求和
print(fib(1).next())
g = fib(5)
while True:
    try:
        x = next(g)
        print('g:',x)
    except StopIteration as e:
        print('generation return value:',e.value)
        break

6.迭代器并行

import time
def consumer(name):
    print('%s准备喝咖啡'%name)
    while True:
        kafei = yield#运行到yield就会暂停
        print('%s来了,%s喝了美式'%(kafei,name))
# bbs=consumer('luhan')
# bbs.__next__()

def producer(name):
    c1 = consumer('a')
    c2 = consumer('b')
    c1.__next__()#必须传非空或者调用一次next()方法才能进行川指出操作
    c2.__next__()
    print('开始准备咖啡')
    for i in range(10):#生产者循环10次,每次生成两杯咖啡,分给两个消费者
        time.sleep(1)
        print('做了一杯:')
        c1.send(i)
        c2.send(i)
producer('wuyifan')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值