from collections import Iterable, Iterator
'''
可迭代对象:可以直接作用于for循环的对象统称为可迭代对象
(Iterable) 可以用isinstance()去判断一个对象是否是Iterable对象
可以直接作用于for的数据类型一般分两种
1、集合类数据类型:list、 tuple、 dict、 set、 string
2、是generator,包括生成器和带yield的generator function
'''
print(isinstance([],Iterable))
print(isinstance((),Iterable))
print(isinstance({},Iterable))
print(isinstance("",Iterable))
print(isinstance((x for x in range(10)),Iterable))
print(isinstance(1,Iterable))
'''
迭代器:不但可以作用于for循环,还可以被next()函数不断的调用并返回下一个值
直到最后抛出一个StopIteration错误表示无法继续返回下一个值
可以被next()函数调用并不断返回下一个之的对象称为迭代器
(Iterator对象)
可以用isinstance()函数判断一个对象是否是可迭代对象
'''
print(isinstance([],Iterator))
print(isinstance((),Iterator))
print(isinstance({},Iterator))
print(isinstance("",Iterator))
print(isinstance((x for x in range(10)),Iterator))
l = (x for x in range(4))
print(l)
print(next(l))
print(next(l))
print(next(l))
print(next(l))
lq = (x for x in [1, 2, 3, 5])
print(next(lq))
print(next(lq))
print(next(lq))
print(next(lq))
#同理tuple、dict、set、string都可以
#转换成Iterator对象
a = iter([2, 4, 6])
print(next(a))
print(next(a))
print(next(a))
print(isinstance((a), Iterator))
endstr = "end"
str = ""
for line in iter(input, endstr):
str += line + "\n"
print(str)