可迭代对象:有__iter__方法,且返回一个迭代器对象
判断一个对象是否可迭代:
from collections import Iterable
isinstance(判断对象, Iterable)
返回True 则是 False 不是
迭代器:有__iter__方法和__next__方法:
判断一个对象是否是迭代器:
from collections import Iterator
isinstance(判断对象, Iterator)
返回True 则是 False 不是
迭代器I调用方法:
for i in I
next(I)
# list(可迭代对象)
list(i for i in range(10))
list(range(10))
for i inGnext(G)
# 另外一种调用生成器的方式# G.send(None) # 如果需要往函数中传入参数,则写,不需要传参,写None
生成器创建方法(一):
将列表推到式的[]改为() G = (i for i in range(10))
生成器创建方法(二):函数中的return换成yield,如果生成器也有return,可以通过try,抛出异常的方式获取return的内容:
例题:生成器打印列表:
defgenerator(num)
i = 0while i < num:
i += 1yield i-1# 相当于return # a yield b 可以通过send(a)传入参数,a 和 b 完全没有关系,执行顺序:先b后areturnNone
调用生成器
G = generator(100)
whileTrue:
try:
num = G.send(None) # 如果没有参数传入,要写send(None)# 还可以用next(G)调用生成器,取出数据
print(num)
except StopIteration as ret: # 或者用except Exception as ret
print(ret.value) # ret.value原因 ret返回的是一个对象,调用value方法返回Nonebreak