【Python笔记】Python高级特性——迭代器

迭代器(Iterator)

迭代器包含有next方法的实现,在正确的范围内返回期待的数据以及长处范围后能够抛出StopIteration的错误停止迭代

  • 什么是可迭代对象?

a.定义

集合(list,tuple,dict,str等),还有生成器(generator),当然也包括带yield的生成器函数(generator function)。这些可以直接作用于for循环的对象统称为可迭代对象(Iterable)

b.如何判断可迭代对象(Iterable)

isinstance()语法:
isinstance(object,classinfo)

参数:
object——实例对象
classinfo——可以是直接或间接类名、基本类型或者由它们组成的元组

返回值:
如果对象的类型于参数二的类型(classinfo)相同则返回True,否则返回False

实例:

a = 2
print(isinstance(a,int))
# 打印结果 True
print(isinstance(a,str))
# 打印结果False
print(isinstance(a,(str,int,list)))
# 打印结果True  是元组中的一个返回True

可以使用isinstance()判断一个对象是否为可Iterable对象

from collections import Iterable

print(isinstance([],Iterable))
# True   集合是可迭代对象

print(isinstance({},Iterable))
# True   字典是可迭代对象

print(isinstance('abc',Iterable))
# True   字符串是可迭代对象

print(isinstance((x for x in range(10)),Iterable))
#True   生成器是可迭代对象

print(isinstance(100,Iterable))
# False   整数型不是可迭代对象
  • 什么是迭代器?

a.定义

可以被next()函数调用并不断返回下一个值得对象称为迭代器(Iterator)

b.如何判断一个对象是否是迭代器对象?

同样是使用isinstance()判断

from collections import Iterator

print(isinstance((x for x in range(10)),Iterator))
# 输出结果:True  

print(isinstance([],Iterator))
# False

print(isinstance({},Iterator))
# False

print(isinstance('abc',Iterator))
# False

生成器都是迭代器(Iterator)对象,但集合(list),字典(dict)还有字符串(str)虽然是可迭代对象(Iterable),却不是迭代器(Iterator)

如果想让集合,字典,字符串等可迭代对象变成迭代器,可以使用iter()函数

list = [1,2,3]
print(next(list))
# 输出结果:TypeError: 'list' object is not an iterator

list = [1,2,3]
L = iter(list)
print(next(L))
# 输出结果:1
  • 小结

a.凡是可作用于for循环的对象都是可迭代对象(Iterable)类型

b.凡是可作用于next()函数的对象都是迭代器(Iterator)类型,它们表示一个惰性计算的序列
#惰性计算:只有在需要返回下一个数据时才会计算

c.集合数据类型如list、dict、str等是可迭代对象(Iterable)但是不是迭代器(Iterator),不过可以通过iter()函数获得一个迭代器对象

你可能感兴趣的:(Python)