迭代器
1 ''' 2 可迭代对象: 3 概念:可以直接作用于for循环的对象,叫做可迭代对象[Iterable] 4 判断方式:判断一个对象是否为可迭代的对象:isinstance(obj, Iterable) 5 可以直接作用于for的对象: 6 1、基本数据类型:list tuple dict set string 7 2、generator生成器:带有yield的生成器函数 8 ''' 9 10 # Iterable 如果使用,需要从collections.abc模块中导入 11 from collections.abc import Iterable 12 # 判断以后个对象是否为可迭代对象 13 print(isinstance([], Iterable)) # T 14 print(isinstance("", Iterable)) # T 15 print(isinstance((), Iterable)) # T 16 print(isinstance({}, Iterable)) # T 17 print(isinstance(100, Iterable)) # False 18 # x for x in range(3) --> 产生一个列表,列表的数量根据range确定,列 19 # 表的值,根据for前面的内容确定 20 print(isinstance((x for x in range(3)), Iterable)) # True 21 22 23 ''' 24 迭代器: 25 概念:不仅可以作用于for循环,也可以使用next() 函数不断调用并 26 获取下一个值,直到取出最后一个。当取出最后一个元素时, 27 再继续调用next()时,会提出一个StopIteration错误表示无法继续 28 下一个数据的提取。 29 可以被next()函数调用并提取元素的对象称为迭代器对象。 30 判断一个对象是否为迭代器对象:isinstance(obj, Iterator) 31 ''' 32 print('************************华丽丽的分割线*********************') 33 from collections.abc import Iterator 34 print(isinstance([], Iterator)) # F 35 print(isinstance("", Iterator)) # F 36 print(isinstance((), Iterator)) # F 37 print(isinstance({}, Iterator)) # F 38 print(isinstance(100, Iterator)) # F 39 print(isinstance((x for x in range(3)), Iterator)) # True 40 41 li = (x for x in range(3)) # <generator object <genexpr> at 0x0000021950E1F9A8> 42 # print(li) 43 print('0000000000000000000000000') 44 # for i in li: 45 # print(i) 46 print(next(li)) 47 print(next(li)) 48 print(next(li)) 49 # 如果使用next提取元素,当元素全部提取结束,再提取时, 50 # 返回StopIteration错误 51 # print(next(li)) # StopIteration 52 53 li1 = [1,2,3] 54 # for i in li1: 55 # print(i) 56 # print(next(li1)) # TypeError: 'list' object is not an iterator 57 58 # 将list dict tuple set string 强转为迭代器 iter(obj) 59 li2 = [100, 200, 300] 60 iter1 = iter(li2) 61 print(iter1) 62 print(type(iter1)) 63 print(next(iter1)) # 100 64 65 print(isinstance(iter([]), Iterator)) 66 print(isinstance(iter(()), Iterator)) 67 print(isinstance(iter({}), Iterator)) 68 print(isinstance(iter(""), Iterator)) 69 # print(isinstance(iter(100), Iterator)) # 强转失败