千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:西安千锋IT培训  >  技术干货  >  什么是迭代器?

什么是迭代器?

来源:千锋教育
发布人:xqq
时间: 2023-10-13 21:44:35

一、什么是迭代器

迭代器协议

迭代器是python较早大的功能之一,是访问集合元素的一种方式。对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个s较好lteration异常,以终止迭代(只能往后走,不能往前退)。迭代器就是实现了__next__方法,返回序列的下一个元素,如果没有元素了,就会抛出S较好Iteration异常,python中的迭代器还实现了__iter__方法,因此迭代器也是可以迭代的。

所以简单地说:在python中,内部含有__iter__方法并且含有__next__方法的对象就是迭代器。

可迭代对象

在python中一切皆对象,那么哪些是可迭代对象呢?其实很容易理解可以遍历的对象例如:字符串,list,tuple,dic,set等都属于。如果我们无法判断,就只需要记住在python中,但凡内部有__iter__方法的对象,都是可迭代对象。

可迭代对象如何转换为迭代器

可以通过iter()方法或者可迭代对象.__iter__()方法将可迭代对象转为迭代器

list1 = [1, 2, 3]

print(list1.__iter__())

print(iter(list1))

迭代器取值

可迭代对象是不可以一直迭代取值的(除去索引,切片及key),但是转换为迭代器就可以了,迭代器是利用__next__()进行取值。

list1 = [1,2,3]

obj = list1.__iter__()  #或者通过iter(list1)转换

#print(obj) #

ret = obj.__next__()

print(ret)

1

ret = obj.__next__()

print(ret)

2

ret = obj.__next__()

print(ret)

3

ret = obj.__next__()  #S较好Iteration

Traceback (most recent call last):

  File “”, line 1, in

S较好Iteration

#迭代器利用next取值:一个next取对应的一个值,如果迭代器里面的值取完了还要next那就报S较好Iteration错误

延伸阅读:

二、容器

简单来说,容器就是存储某些元素的统称,它最大的特性就是判断一个元素是否在这个容器内。

怎么理解这句话?

很简单,在 Python 中,我们通常使用 in 或 not in 来判断一个元素存在/不存在于一个容器内。

例如下面这个例子:

print(‘x’ in ‘xyz’)  # True

print(‘a’ not in ‘xyz’)  # True

print(1 in [1, 2, 3])       # True

print(2 not in (1, 2, 3))  # False

print(‘x’ not in {‘a’, ‘b’, ‘c’}) # True

print(‘a’ in {‘a’: 1, ‘b’: 2}) # True

在这个例子中,我们可以看到 str、list、tuple、set、dict 都可以通过 in 或 not in 来判断一个元素是否在存在/不存在这个实例中,所以这些类型我们都可以称作「容器」。

那为什么这些「容器」可以使用 in 或 not in 来判断呢?

这是因为它们都实现了 __contains__ 方法。

如果我们也想自定义一个容器,只需像下面这样,在类中定义 __contains__ 方法就可以了:

class A:

    def __init__(self):

        self.items = [1, 2]

    def __contains__(self, item):

        return item in self.items

a = A()

print(1 in a)   # True

print(2 in a)   # True

print(3 in a)   # False

在这个例子中,类 A 定义了 __contains__ 方法,所以我们就可以使用 1 in a 的方式去判断这个元素是否在 A 这个容器内。

换句话说,一个类只要实现了 __contains__ 方法,那么它就是一个「容器」。

我们在开发时,除了使用 in 判断元素是否在容器内之外,另外一个常用的功能是:输出容器内的所有元素。

例如执行 for x in [1, 2, 3],就可以迭代出容器内的所有元素。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

变量名储存在哪里?

2023-10-13

C++的cmax和max还有cmin和min有什么区别?

2023-10-13

Python语言中,编译和解释的区别是什么?

2023-10-13

最新文章NEW

物联网开发用什么语言?

2023-10-13

为什么说lisp有理论上较高的计算能力?

2023-10-13

SQL中的 in 与 not in 有什么区别?

2023-10-11

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>