我是靠谱客的博主 受伤抽屉,最近开发中收集的这篇文章主要介绍迭代、可迭代对象、迭代器、生成器、for循环、iter()函数与next()函数的概念及关系,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.关系图

在这里插入图片描述

在这里插入图片描述

2.迭代

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

3.可迭代对象

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

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

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

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

In [50]: from collections import Iterable
 
In [51]: isinstance([], Iterable)
Out[51]: True
 
In [52]: isinstance({}, Iterable)
Out[52]: True
 
In [53]: isinstance('abc', Iterable)
Out[53]: True
 
In [54]: isinstance(mylist, Iterable)
Out[54]: False
 
In [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的异常后循环结束。

最后

以上就是受伤抽屉为你收集整理的迭代、可迭代对象、迭代器、生成器、for循环、iter()函数与next()函数的概念及关系的全部内容,希望文章能够帮你解决迭代、可迭代对象、迭代器、生成器、for循环、iter()函数与next()函数的概念及关系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部