Python--迭代对象与迭代器

一、可迭代对象(Iterable)

  可迭代对象(Iterable):可以直接作用于for循环的对象统称为可迭代对象。可以用isinstance()去判断一个对象是否是可迭代对象(Iterable)。
  可以直接作用于for的数据类型一般分两种:
  1、集合数据类型,如list、tuple、dict、set、string
  2、generator,包括生成器和带yield的generator function

  在讲解迭代器之前,我们先来了解一下isinstance()。

二、isinstance() 函数:来判断一个对象是否是一个已知的类型。

  语法:isinstance(object, classinfo)
  参数:object – 实例对象。
     classinfo – 可以是直接或间接类名、基本类型或者由它们组成的元组。

对于基本类型来说 classinfo 可以是:int,float,bool,complex,str(字符串),list,dict(字典),set,tuple。
classinfo 的字符串是 str 而不是 string,字典也是简写 dict。

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

from collections.abc import Iterable

print(isinstance([],Iterable)) #返回True  因为list是可迭代对象
print(isinstance((),Iterable)) #返回True  因为tuple是可迭代对象
print(isinstance({},Iterable)) #返回True  因为dict是可迭代对象
print(isinstance("",Iterable)) #返回True  因为string是可迭代对象
print(isinstance((x for x in range(10)),Iterable)) #返回True  是可迭代对象
print(isinstance(1,Iterable))      #返回False

  我们简要理解(x for x in range(10))

  前面的那一个x是该迭代器生成的列表中每一个元素要代入的表达式,后面的for x in range(10)得出x的取值范围代入前面的x,得到生成的一个列表。

三、迭代器(Iterator对象)

  迭代器(Iterator对象)不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出一个StopIteration错误,表示无法继续返回下一个值

如何判断是否是一个Iterator对象(迭代器)?
可以用isinstance()函数判断一个对象是否是Iterator对象

from collections.abc import Iterator

print(isinstance([],Iterator)) #返回False
print(isinstance((),Iterator)) #返回False
print(isinstance({},Iterator)) #返回False
print(isinstance("",Iterator)) #返回False
print(isinstance((x for x in range(10)),Iterable)) #返回True
#可得只有(x for x in range(10)才是迭代器

  我们来验证一下x for x in range(10))以及与这个相似的,是否符合迭代器的定义。
  第一个:x for x in range(5)

l = (x for x in range(5))
print(next(l))   #0
print(next(l))   #1
print(next(l))   #2
print(next(l))   #3
print(next(l))   #4
#print(next(l))  #报错StopIteration

  第二个:x for x in [23,4,5,64,3435]

l = (x for x in [23,4,5,64,3435])
print(next(l))   #23
print(next(l))   #4
print(next(l))   #5
print(next(l))   #64
print(next(l))   #3435
#print(next(l))  #报错StopIteration

  他们符合迭代器的定义,所以都是迭代器。

四、iter() 函数:用来生成迭代器

  返回值:迭代器对象

  我们使用iter( )可以将list转成Iterator对象
例:

a = iter([1,2,3,4,5])
print(next(a))  #1
print(next(a))  #2
print(next(a))  #3
print(next(a))  #4
print(next(a))  #5

a = iter([1,2,3,4,5])
for i in a:
    print(i)
'''
1
2
3
4
5
'''

  元组,字典,字符串也可以,我们直接用isinstance( )函数来判断列表、元组,字典,字符串通过iter( )是否变成了Iterator对象。

from collections.abc import Iterator

print(isinstance(iter([]),Iterator))  #返回True
print(isinstance(iter(()),Iterator))  #返回True
print(isinstance(iter({}),Iterator))  #返回True
print(isinstance(iter(""),Iterator))  #返回True

  和上面的对比通过使用iter()将列表,元组,字典,字符串转化成了Iterator对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。 首先,让我们来谈谈 Python 中的异常处理。在 Python 中,异常是程序在运行时遇到的错误或问题,它会导致程序停止运行并抛出一个异常。为了避免这种情况,我们可以使用 try/except 块来捕获并处理异常。例如: ``` try: # some code that might raise an exception except SomeException: # handle the exception ``` 其中,SomeException 是你想要捕获的异常类型。当代码运行到 try 块中的代码时,如果出现了 SomeException 异常,那么 except 块中的代码就会被执行。 接下来,让我们来谈谈 Python 中的对象。在 Python 中,一切都是对象,包括数字、字符串、函数等等。对象有一个类型,它定义了对象可以执行的操作。例如,数字类型可以执行加、减、乘等操作,字符串类型可以执行拼接、切片等操作。你也可以创建自己的对象,并定义它们的类型和操作。 最后,让我们来谈谈 Python 中的迭代器迭代器是一种对象,它可以让你逐个访问一个序列中的元素。Python 中的迭代器是通过 __iter__ 和 __next__ 方法实现的。__iter__ 方法返回一个迭代器对象,__next__ 方法返回序列中的下一个元素。例如: ``` class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration result = self.data[self.index] self.index += 1 return result my_iter = MyIterator([1, 2, 3]) for item in my_iter: print(item) ``` 在上面的例子中,我们创建了一个名为 MyIterator迭代器对象。它有一个 data 属性,表示要迭代的序列,以及一个 index 属性,表示当前迭代的位置。__iter__ 方法返回 self,表示它本身就是一个迭代器对象。__next__ 方法返回序列中的下一个元素,并将 index 属性加 1。当迭代器遍历到序列末尾时,会抛出 StopIteration 异常,表示迭代结束。 希望这些信息能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值