from collections import Iterable
print(isinstance([],Iterable)) #可以遍历的对象:list、 tuple 、dict、str,虽然是Iterable(可迭代对象),却不是Iterator(迭代器)
print(isinstance('abc',Iterable)) #整形或者浮点型不能作为可迭代对象
print(isinstance(100,Iterable))
True
True
False
#创建迭代器
list = [1,2,3,4,5]
list_iter = iter(list)
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))
next(list_iter) #指针已到列表外
1
2
3
4
5
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-12-a6d6480dc22f> in <module>
7 print(next(list_iter))
8 print(next(list_iter))
----> 9 next(list_iter)
StopIteration:
#判断是否是迭代器 使用isinstance()方法判断
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance('abc',Iterator))
print(isinstance(iter([]),Iterator))
print(isinstance(iter('abc'),Iterator))
False
False
True
True
G = (x*2 for x in range(5)) #小括号形成生成器
print(type(G))
<class 'generator'>
G = [x*2 for x in range(5)] #大括号形成列表
print(type(G))
<class 'list'>
def fib(n):
current = 0
num1,num2 = 0,1
while current <n:
num =num1
num1,num2 = num2,num1+num2
current +=1
yield num
return 'done'
g = fib(5)
while True:
try:
x=next(g)
print("value:%d"%x)
except StopIteration as e:
print("生成器返回值:%s"%e.value)
break
value:0
value:1
value:1
value:2
value:3
生成器返回值:done
def gen():
i = 0
while i<5:
temp = yield i
print(temp)
i+=1
f = gen()
print(next(f))
0
print(f.send('haha'))
haha
1