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

简介: Python|认识可迭代对象与迭代器

问题描述

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

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


解决方案

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

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

创建方法

1 可迭代对象

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

d={‘a:1,b:2,c:3}

for key in d:

print(key)

a

c

b

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

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

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

for ch in 'ABC':

print(ch)

...

A

B

C

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

from collections import Iterable

print(isinstance('abc', Iterable))# str是否可迭代

True

Print(isinstance([1,2,3], Iterable))# list是否可迭代

True

Print(isinstance(123, Iterable)) # 整数是否可迭代

False

2 迭代器

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

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

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

from collections import Iterator

print( isinstance((x for x in range(10)), Iterator))

True

print(isinstance([], Iterator))

False

print(isinstance({}, Iterator))

False

print(isinstance('abc', Iterator))

False


结语

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

目录
相关文章
|
3天前
|
Python
【Python操作基础】——字典,迭代器和生成器
【Python操作基础】——字典,迭代器和生成器
|
5天前
|
C++ Python
Python中的类与对象
Python中的类与对象
6 1
|
6天前
|
存储 数据处理 Python
python 之map、zip和filter迭代器示例详解
python 之map、zip和filter迭代器示例详解
9 0
|
6天前
|
存储 程序员 Python
深入理解Python中的生成器和迭代器
本文将深入探讨Python中生成器和迭代器的概念、原理以及它们在编程中的应用。通过详细解析生成器和迭代器的工作机制,读者将能够更好地理解Python中的迭代器协议、生成器函数以及生成器表达式的使用方法。同时,本文还将介绍生成器和迭代器在Python中的一些常见应用场景,并提供一些实用的编程技巧和最佳实践。
|
16天前
|
Python 容器
python匿名函数、迭代器、高阶函数(二)
python匿名函数、迭代器、高阶函数(二)
|
16天前
|
索引 Python
python匿名函数、迭代器、高阶函数(一)
python匿名函数、迭代器、高阶函数(一)
|
2月前
|
开发者 Python
Python对象和类
Python对象和类
13 0
|
Python 容器
【Python零基础入门篇 · 20】:可迭代对象和迭代器的转换、自定义迭代器类、异常类、生成器
【Python零基础入门篇 · 20】:可迭代对象和迭代器的转换、自定义迭代器类、异常类、生成器
105 0
【Python零基础入门篇 · 20】:可迭代对象和迭代器的转换、自定义迭代器类、异常类、生成器
|
索引 Python
Python的对象与类
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。首先需要明确,面向对象编程不是python独有的;面向对象是一种编程思想;在面向对象的思想中万物都是对象。
95 0
Python的对象与类
|
Python
【Python面线对象进阶⑤】——枚举类enum
枚举类,在企业开发中用的比较多 当我们需要定义常量时,一个办法是用大写的变量通过整数来定义。
177 0
【Python面线对象进阶⑤】——枚举类enum