欢迎访问Python教程网,我们的网址www.041b.com
Python|认识可迭代对象与迭代器 – python教程 - python编程学习交流
Python|认识可迭代对象与迭代器 – python教程 - python编程学习交流

Python|认识可迭代对象与迭代器

admin2020-08-18 发布 python教程

本文将为您描述Python|认识可迭代对象与迭代器,具体操作过程:

问题描述

可迭代对象指的是定义了_ _ iter _ _ 方法的对象,调用该方法会返回一个迭代器对象。可迭代对象,例如:list列表、tuple元组、带有上述iter方法的对象等等。

迭代器就是定义_ _ next _ _ 方法的对象。每次调用上述方法就返回迭代器一个值,没有就抛出StopIteration异常。

解决方案

如果给定一个list或tuple,我们可以用for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。在Python中,迭代是用for…in来完成的,而很多语言比如C语言,迭代list是通过下标完成的

一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。这些可以直接作用于for循环的对象统称为可迭代对象:Iterable

创建方法

1 可迭代对象

Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:

d={‘a’:1,’b’:2,’c’:3}for key in d:print(key)acb

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k,v in d.items()。

由于字符串也是可迭代对象,因此,也可以作用于for循环:

for ch in 'ABC':print(ch)…ABC

判断一个对象是否是可迭代对象可以通过collections模块的Iterable类型判断

from collections import Iterableprint(isinstance('abc', Iterable))# str是否可迭代TruePrint(isinstance([1,2,3], Iterable))# list是否可迭代TruePrint(isinstance(123, Iterable)) # 整数是否可迭代False

2 迭代器

迭代器可以由可迭代对象通过内置函数iter()函数实现,该函数会接受一个可迭代对象,返回一个迭代器对象。实际上,iter()函数内部调用可迭代对象的——iter——方法。而前面在可迭代对象中就提到,该方法会返回一个迭代器对象

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

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

from collections import Iteratorprint( isinstance((x for x in range(10)), Iterator))Trueprint(isinstance([], Iterator))Falseprint(isinstance({}, Iterator))Falseprint(isinstance('abc', Iterator))False

结语

凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。Python的for循环本质上就是通过不断调用next()函数实现的。

END

主 编 | 王文星

责 编 | 李 靖

where2go 团队

Python|认识可迭代对象与迭代器就为您介绍到这里.欢迎访问python自学网 www.041b.com

转载原创文章请注明,转载自: python教程 - Python|认识可迭代对象与迭代器 (https://www.041b.com/40092.html)

留言

写下你的评论吧

近期评论