Day 11

迭代器与生成器

print(1 in [1, 2,3])
print(1 not in [1, 2, 3])
print(4 not in {1, 2, 3})
print(4 not in (1, 2, 3))
print(2 in {1: 'foo', 2: 'bar', 3: 'qux'})
print('x' not in 'xkjsi')
可以被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

    
while n<max:
        
yield b
        
#print(b)
        
a,b=b,a+b
        
n=n+1;

l= fab(10)
for in l:
    
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))

 
 
 
异常  最终要执行的内容写在finally中:
释放资源
a=10;
b=input('请输入被除数:');
if not b.isdigit():
    print('输入错误请输入数字:')
else:
    b=int(b);
    if b == 0:
        print("被除数不能为0  ")
    else:
        c = a / b;
        print(c).

try:
    b = int(b);
    c = a / b;
    print(c)
except ZeroDivisionError as zero:
    print('被除数不能为0..异常信息:',zero)
except ValueError as v:
    print('转换数字 出错 请输入数子.异常信息:',v)
except Exception:
    print('发生错误!')
else:
    print("程序正常结束..")
finally:
    try:
        del a,b,c
    except Exception as e:
        print(e)
    print("finally: 块儿  释放资源 ")
print('程序其他代码!')


class SexException(Exception):
    pass

def inputSex():
    sex=input('请输入性别:')
    if sex!='男' and sex!='女':
        raise SexException("性别只能是男 或 女 ")
    print('输入的性别:',sex)

try:
    inputSex();
except SexException as s:
    print(s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值