迭代器 :iter()--next()两种方法可以用于字符串、列表、元祖(有序对象)、生成器:yield()、send()

#迭代器  主要有iter() 和next()两种方法 可以用与字符串,列表,元祖(有序对象)
'''
list1=[12,23,345,12,34]
it=iter(list1)#将列表变成迭代器对象
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it)) #迭代器对象元素取完后,提示stopIteration
'''

#用for遍历我们的迭代器 ,跟我们的列表最大的区别是在:列表是一个容器,打印出来等于打印全部的元素;迭代器,依次取出我们的元素,
#用多少取多少
'''
list1=[12,23,345,12,34]
it=iter(list1)#将列表变成迭代器对象
for i in it:  #可以遍历列表,字符串,元祖,字典.items(),迭代器对象
    print(i)
'''

#生成器
#生成器是迭代器的一种,返回迭代器的函数,迭代器函数有iter()函数的功能,两者取值都是需要我们的next()函数,
#生成器也是可以用于for循环
#斐波那契数列(Fibonacci sequence),指的是这样一个数列:1、1、2、3、5、8、13、21、34、……,
# 斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2)
'''
def fib(n):
    a,b,count=0,1,2
    if n<count:
        return   #return 后面不加任何返回值,返回None
    while True:
        if count<=n:
            count+=1
            a,b=b,a+b
            yield b
            print('好棒!')
#fib(n)就是生成器
# it=fib(5)
# print(next(it))
# print(next(it))
#使用for循环取值
for i in fib(6):
    print(i)
'''

#yield与return的区别,yield只返回一次,有记忆效果,下一次打印的话直接先从yield后面执行;return呢,不管返回多少次,都是从头开始
'''
def fib(n):
    a,b,count=0,1,2
    if n<count:
        return   #return 后面不加任何返回值,返回None
    while True:
        if count<=n:
            count+=1
            a,b=b,a+b
            return b
            print('好棒!')
print(fib(5))
print(fib(5))
'''

'''
def fib(n):
    a,b,count=0,1,2
    flag=True
    if n<count:
        print(None)  #return 后面不加任何返回值,返回None
    while flag:
        if count<=n:
            count+=1
            a,b=b,a+b
            # return b
            print('%d  %d    %d'%(a,b,a+b))
            if count==n:
                break
    # print('好棒!')
print(fib(5))
'''

#send()函数
def f():
    print('start')
    a = yield 1  #执行到yield会暂停,先执行我们的yield ,再进行赋值a=None
    print(a)
    print('middle....')
    b = yield 2  # 2这个值只是迭代值,调用next时候返回的值
    print(b)
    print('next')
    c = yield 3
    print(c)
a=f() #这是一个生成器函数,直接调用不会打印
# print(next(a))
# print(next(a))
# print(next(a))
# print(next(a))
#send()使用之前必须使用next(),send()作用在于,把值传递给我们当前的yield(也有next迭代的作用)
# print(next(a))
# print(a.send('msg'))
# print(a.send('msg1'))
# print(next(a))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值