import collections # import 后面直接写模块名 (导入标准库模块) from collections(具体的模块名) import Iterable(属性) # 从collections模块中导入Iterable这个属性,只是导单个方法,其它方法都没有导入进来 格式: from + 模块名 + import + 属性 (精确导入) ''' 可迭代对象: 可以作用于for循环的对象(容器),就是可迭代对象 例如: list、tuple、set、dict、string、生成器对象(generator)# generator 可能来源 于生成器表达式,也可能来源于生成器函数 如何高效的检测某种数据类型是否是可迭代对象? collections模块中的isinstance()方法 # isinstance(obj, Iterable) ''' print(isinstance([],collections.Iterable ))# 在isinstance里面传参,第一个参数传一个空列表,第二个参数为:因为传入的是collections # 所以用collections去点Iterable # 判断是否是一个Iterable # Iterable意思是:可迭代对象 print(isinstance((),collections.Iterable )) print(isinstance({},collections.Iterable )) print(isinstance(set(),collections.Iterable )) print(isinstance("",collections.Iterable )) print(isinstance(123,collections.Iterable )) # 不可迭代对象 ''' 运行如下: True 可迭代对象 True 可迭代对象 True 可迭代对象 True 可迭代对象 True 克迭代对象 False 不可迭代对象 ''' ''' 如果是按照from collections import Iterable (精确导入)这种方法导入 下面的打印就不用collections去点Iterable了 ''' from collections import Iterable # 精确导入这个Iterable 所以没有必要再加collections print(isinstance((), Iterator)) print(isinstance({}, Iterator)) print(isinstance(set(), Iterator)) print(isinstance("", Iterator)) from collections import Iterator print(isinstance((x for x in range(3)), Iterator)) ''' 迭代器对象: 1).可以作用于for循环的对象(容器) 2).可以直接被next函数调用的对象 还是使用isinstance() 方法 # isinstance(obj, Iterator)方法来判断是否为迭代器对象 ''' ''' 可迭代对象和迭代器对象 Iterable 可迭代对象 Iterator 迭代器对象 ''' list = [10, 20, 30, 40, 50] # 如何将list、tuple...等 可迭代对象 转换为 迭代器对象 呢? # 使用内置的iter()方法实现 it = iter(list) # 固定模式 print(isinstance(it, Iterator)) print(isinstance(it, Iterable)) # 不能把list转换为generator对象 # genn = generator(list) # 编译报错,方法不存在! # 总结: # 迭代器对象一定是可迭代对象 # 可迭代对象不一定是迭代器对象 # 生成器对象(generator)是迭代器的一种特例 # 补充: # next() 函数每次执行内部光标走一步,直到走到最后一个位置,如果还要强硬的去调用next() # 会报错:StopIteration
Iterable & Iterator
最新推荐文章于 2022-04-27 22:42:37 发布