什么是迭代器?
一、什么是迭代器
迭代器协议
迭代器是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 “
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],就可以迭代出容器内的所有元素。

相关推荐HOT
更多>>
如何使用Pandas处理Excel?
如何使用Pandas处理Excel?做过行政或者人事,或者对此有过了解的小伙伴,一定对下发各个部分的表有着非常深刻的印象,最常见的就是需要我们将一...详情>>
2023-11-14 07:43:15
python中np.insert()函数的使用方法
python中np.insert()函数的使用方法在numpy数组操作中,np.append()方法可以在每行每列的最后添加数据,但其位置是规定的,那如果想要指定添加...详情>>
2023-11-14 05:06:13
SVM在python中的原理如何理解?
SVM在python中的原理如何理解?在python中除了编程化的知识点外,对于数学方法的算法也有所涉及,SVM就是一种很好地体现。我们学习过数学中的坐...详情>>
2023-11-14 04:30:04
python处理绝对路径和相对路径函数有哪些?
python处理绝对路径和相对路径函数有哪些?绝对路径和相对路径是什么?绝对路径:从根文件夹开始,Windows系统以盘符(C:)作为根文件夹,OSX或Lin...详情>>
2023-11-14 03:33:02热门推荐
如何使用python any()判断多元素?
沸如何使用Pandas处理Excel?
热python函数中的参数有哪些?
热python中pygal模块如何使用?
新Python的excel处理操作
python中doctest库是什么?
python中series是什么意思
python中np.insert()函数的使用方法
SVM在python中的原理如何理解?
Python描述符中有哪三种方法?
python处理绝对路径和相对路径函数有哪些?
python单继承和多继承如何定义?
python封装中的私有如何理解?
python模块引入的三种方式
技术干货






