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)) # 强转失败