迭代器与生成器
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 i 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)