python——迭代器与生成器

本文介绍了Python中的迭代器和生成器。迭代器可以通过`iter()`和`next()`函数不断返回可迭代对象的下一个值,直到抛出`StopIteration`错误。生成器是一种特殊的迭代器,使用`yield`关键字来定义,它在运行时生成结果,节省内存。通过示例展示了斐波那契数列的迭代器和生成器实现,并讨论了如何创建自定义的可迭代类。最后,代码中还包含了一个异常处理示例,用于验证输入的性别是否合法。

 迭代器和生成器

 print(1 in[1,2,3])

 print(1 not in[1,2,3])

 print(4 in{1,2,3})

 print(4 not in(1,2,3))

 print('x' not in 'dlkjfxfei')

 可迭代对象(iterable)

 可以被next()函数调用并不断返回下一个值

 知道没有数据时抛出StopIteration错误的对象称之为迭代器,即Iterator

 l=(1,2,3)

 print(type(l))

 l=iter(l)

 print(type(l))

 for i in l:

     print(i)

 print(next(l))

 a,b,c=1,2,3

 print(a+b)

 print(next(l))

 print(next(l))

 print(next(l))

 iter(可迭代对象) ===>迭代器--->Iterator

 迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,

 以便于下次迭代的时候获取正确的元素。

 

 斐波那契数列(Fibonacci)演示 迭代器和生成器

 def fab(max):

     n,a,b=0,0,1

     L=[]

     while n < max:

          print(b)

         L.append(b)

         a,b=b,a+b

         n=n+1;

     return L;

 l= fab(10)

 for i in l:

     print(i)

 for i in range(1001):

     print(i)

 

 可迭代类  

 class Fab(object):

     def __init__(self,max):

         self.max=max;

         self.n, self.a, self.b=0,0,1;

 

     def __iter__(self):

         return self;

 

     def __next__(self):

         if self.n<self.max:

            r= self.b;

            self.a,self.b=self.b,self.a+self.b;

            self.n+=1;

            return r;

         raise StopIteration();

 

 f=Fab(10);

 for i in f:

     print(i)

 print(next(f));

 print(next(f));

 print(next(f));

 print(next(f));

 print(next(f));

 print(next(f));

 

 

 生成器

 是特殊的迭代器,只需要一个yiled关键字。

 生成器的返回值不是通过return而是yield

 def fab(max):

     n,a,b=0,0,1

     L=[]

     while n < max:

         yield b

         L.append(b)

         a,b=b,a+b

         n=n+1;

 

 l= fab(10)

 for i in l:

     print(i)

 

 

class SexException(Exception):

    pass

 

def inputSex():

    sex=input('请输入性别:')

    if sex!='' and sex!='':

        raise SexException("性别只能是男 或 女")

    print('输入的性别:',sex)

 

try:

    inputSex()

except SexException as s:

    print(s)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值