python迭代器_20.python迭代器

可迭代对象Iterable和迭代器对象Iterator:

可迭代对象:

满足前提:

可以被循环操作的对象,就是可迭代对象

举例:str、list、tuple、set、dict、range、generator...

如何高效的检测一个对象是否是可迭代对象?

可以使用collections模块中的Iterable类型配合isinstance(obj,type)内置函数来判断即可

操作步骤如下:

步骤一:导入collections模块

步骤二:collections.Iterable(类型)配合内置函数isinstance()来进行判断,代码如下:

isinstance(obj,collections.Iterable)

如果返回值为True,那么它就是一个可迭代对象

如果返回值为False,那么它不是一个可迭代对象

演示如何判断是否是可迭代对象

importcollectionsstr1 = 'abcdefg'lt = [1,2,3,4,5]

tp = (10,20,30)

s = {100,200,300,400}

dic1 = {'aa':'AA','bb':'BB'}

r = range(10)

gen = (x forx inrange(5))

print(isinstance(str1,collections.Iterable)) #True

print(isinstance(lt,collections.Iterable)) #True

print(isinstance(tp,collections.Iterable)) #True

print(isinstance(s,collections.Iterable)) #Trueprint(isinstance(dic1,collections.Iterable)) #Trueprint(isinstance(r,collections.Iterable)) #Trueprint(isinstance(gen,collections.Iterable)) #True

print(isinstance(100,collections.Iterable)) #False 对于这种整数型数据100没有循环的概念

迭代器对象:

满足前提:

1).必须是一个可迭代对象

2).可以被next()函数所调用的

举例:generator...

如何高效的检测一个对象是否是迭代器对象?

可以使用collections模块中的Iterator类型配合isinstance(obj,type)内置函数来判断即可

操作步骤如下:

步骤一:导入collections模块

步骤二:collections.Iterator(类型)配合内置函数isinstance()来进行判断,代码如下:

isinstance(obj,collections.Iterator)

如果返回值为True,那么它就是一个可迭代对象

如果返回值为False,那么它不是一个可迭代对象

演示是否是迭代器对象

importcollectionsstr1 = 'abcdefg'lt = [1,2,3,4,5]

tp = (10,20,30)

s = {100,200,300,400}

dic1 = {'aa':'AA','bb':'BB'}

r = range(10)

gen = (x forx inrange(5))

print(isinstance(str1,collections.Iterator)) #Falseprint(isinstance(lt,collections.Iterator)) #False

print(isinstance(tp,collections.Iterator)) #Falseprint(isinstance(s,collections.Iterator)) #Falseprint(isinstance(dic1,collections.Iterator)) #Falseprint(isinstance(r,collections.Iterator)) #False

print(isinstance(gen,collections.Iterator)) #Ture只有gen能被next()函数调用以下代码有问题:问题在于iterator对象才能被next()函数所调用# print(next(lt))#TypeError

再谈类型转换:将可迭代对象转换为迭代器对象内置函数:iter(iterable)

#假设一个内置函数iter()里面必须传入一个叫iterable对象,将可迭代对象转换成迭代器对象#内置函数iter 传入lt对象 返回给it1对象

lt = [1,2,3,4,5]

tp = (10,20,30)

it1 = iter(lt)

print(it1,type(it1)) #it2 = iter(tp)

print(it2,type(it2))

print(next(it1)) #1

print(next(it2)) #10

#print(next(lt))而直接next()是会报错的,因为next()不会执行lt对象类型 TypeError: 'list' object is not an iterator以下代码有问题:因为3.14属于float类型,它并不是一个Iterable(可迭代对象),所以不能被iter()函数转换称为Iterator(迭代器对象)# obj = iter(3.14)# print(obj,type(obj))

【注意事项】:

内置函数:

iter(iterable)必须只能调用可迭代对象,否则报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值