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

被折叠的 条评论
为什么被折叠?



