1. 迭代器
1. 迭代是访问集合的一种方式 ,可以记住遍历的位置的对象,int类型和容器类对象不可进行迭代
1. int类型不可进行迭代 例:num = iter(12345) print(next(num)) # TypeError: 'int' object is not iterable 2. 容器类对象也不可为迭代对象 例:class myList: def __init__(self): self.a = [ ] def add(self, item): self.a.append(item) my = myList() my.add(1) my.add(2)
myIter = iter(my)
for i in myIter:
print(i) # 'myList' object is not iterable
2. 通过Python内置函数isinstance()来判断一个对象的数据类型
例: from collections.abc import Iterable
print(isinstance([ ],Iterable) # True
print(isinstance(123,Iterable) # False
print(isinstance(123,int) # True
3. 迭代器的两个基本方法,iter()和next(),这两个方法在一起使用,可以通过for循环遍历
1. 迭代器的应用 myList = [1,2,3,4,5,6] iter_ = iter(myList) print(iter_) # <list_iterator object at 0x000001A749A6BFD0> print(next(iter_)) # 1 print(next(iter_)) # 2 ... 2. 迭代器在for循环中的应用 myList = [1,2,3,4,5,6] iter_ = iter(myList) for i in myList: print(next(iter_)) # 1 2 3 4 5 6 3. 定义一个迭代器对象,异常终止 class myNumber: def __iter__(self): self.a = 1 return self def __next__(self): if self.a < 10: x_ = self.a self.a += 1 return x_ else: raise StopIteration myNum = iter(myNumber()) print(next(myNum) # 1 print(next(myNum) # 2 print(next(myNum) # 3
或 for x in myNum: print(x) # 1 2 3 4 5 6 7 8 9
2. 生成器yield
1. 使用yield的函数称为生成器,是一个返回迭代器的函数,只用于迭代操作
2. 在调用生成器运行的过程中,每次遇到yield函数会暂停并保存当前的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行
3. 调用一个生成器函数,返回一个迭代器对象,StopIteration触发异常,结束迭代
1. 生成器field函数 def contains(): i = 0 while i < 5: yield i i += 1 # 生成器函数 print(contains()) # <generator object contains at 0x000002A837F76D60> # 通过for循环得到内容 for i in contains(): print(i) # 0,1,2,3,4 # 通过next()函数得到内容 net = contains() print(next(net)) # 0 print(next(net)) # 1 print(next(net)) # 2 2. 元组推导式和生成器的关系,元组不可以直接进行推导,而是得到一个生成器,通过next进行循环求值 # 元组推导式 vm = (i for i in range(10)) print(vm) # <generator object <genexpr> at 0x000002E578A81580> print(next(vm)) # 0 print(next(vm)) # 1 print(next(vm)) # 2 ...
3. 生成器实例——斐波那契数列
def fibonacci(n):
num,b,counter = 0,1,0
while True:
if counter > n:
return
yield num
num,b = b,num+b
counter += 1
f = fibonacci(10) # f是一个迭代器,由生成器返回
while True:
try:
print(next(f)) # 0 1 1 2 3 5 8 13 21 34 55
except:
raise StopIteration
标签:迭代,python,self,生成器,iter,next,print From: https://www.cnblogs.com/chf333/p/16888751.html