迭代器

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

 

上一篇:在for循环中哪个更pythonic:zip或enumerate?


下一篇:在python循环中匹配整数