第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 迭代 可迭代对象 迭代器 生成器 for循环 iter()函数与next()函数的概念及关系

迭代 可迭代对象 迭代器 生成器 for循环 iter()函数与next()函数的概念及关系

时间:2021-10-11 22:10:15

相关推荐

迭代 可迭代对象 迭代器 生成器 for循环 iter()函数与next()函数的概念及关系

1.关系图

2.迭代

使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表取值的过程。

3.可迭代对象

使用for循环遍历取值的对象叫做可迭代对象

元组,列表,字典,字符串,集合,range都是可迭代对象

3.1 如何判断一个对象是否可以迭代

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

In [50]: from collections import IterableIn [51]: isinstance([], Iterable)Out[51]: TrueIn [52]: isinstance({}, Iterable)Out[52]: TrueIn [53]: isinstance('abc', Iterable)Out[53]: TrueIn [54]: isinstance(mylist, Iterable)Out[54]: FalseIn [55]: isinstance(100, Iterable)Out[55]: False

4.迭代器

迭代器可以通过next()方法不断重复获取下一个值,直到所有元素全部输出完之后,返回StopIteration才停止。在python3中同时实现在__iter__()和__next__()两个魔法函数的对象,就是迭代器。其中__iter__()方法需要返回一个迭代器, 而__next__()方法返回下一个返回值或者StopIteration

5.生成器

生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和next方法),不需要再手动实现两方法。使用更加方便,它依然可以使用next函数和for循环取值

5.1生成器和迭代器的区别:

生成器在迭代的过程中可以改变当前迭代值,而修改普通迭代器的当前迭代值往往会发生异常,影响程序的执行。

生成器并不是一上来就把所有值装载进内存,因而也不会占用大量的内存,只是在需要使用next()函数获取值的时候,才会取一个值返回,内存开销非常小

具有yield关键字的函数都是生成器,yield可以理解为return,返回后面的值给调用者。不同的是return返回后,函数会释放,而生成器则不会。在直接调用next方法或用for语句进行下一次迭代时,生成器会从yield下一句开始执行,直至遇到下一个yield

6. iter()函数与next()函数

iter函数:获取可迭代对象的迭代器,会调用可迭代对象身上的__iter__方法

next函数:获取迭代器中下一个值,会调用迭代器对象身上的__next__方法

7. for循环的本质

遍历的是可迭代对象

for item in Iterable循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。