python可迭代对象,迭代器,生成器傻傻分不清楚~

本文深入探讨了Python中的可迭代对象、迭代器和生成器的概念及用法。可迭代对象包括list、字符串等,可通过isinstance判断。迭代器增加了next()方法,允许自定义迭代行为。生成器是特殊的迭代器,利用yield关键字实现延迟计算和内存优化。推导式如(x*2 for x in range(10))简洁地创建生成器。此外,还介绍了filter、map和zip等内置函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

collections是一个包含了许多类型的module

from collections import Iterator,Iterable,Generator

1.可迭代对象iterable:

简单的理解是可以用for循环的对象,就是可迭代对象。比如:list,字符串,dict,元组,生成器等。
具有可迭代的特征
语法层面,如果一个对象实现了__iter__方法,那么这个对象就是可迭代对象
判断是否是可迭代对象(Iterable)
通过调用Python内置的isinstance来判断是否是Iterable的实例
In [9]: isinstance([],Iterable)
Out[9]: True

2.迭代器iterator

迭代器就是实现了迭代方式的容器,iterable对象一般只能按默认的正序方式进行迭代,你可以通过为其添加__next__()/next()方法来定制不同的迭代方式,这样通过next方法封装起来的迭代对象生成器就被称作迭代器。与iterable相比iterator多了一个next()方法,next()方法用于定制for循环时具体的返回值及返回顺序以及处理StopIteration异常等。
iterator必定是iterable的,因此其必然含有__iter__方法,此方法保证了iterator是可以迭代的,个人认为可以将__iter__()方法看做迭代器的入口,此入口告诉python对象是可for循环的,当你还为class定义了__next__方法时python的for循环会直接调用__next__()方法进行迭代,因此对于实现了__next__方法的迭代器来讲__iter__方法是一个不可或缺的鸡肋方法,不可或缺是因为他是可迭代的标识,鸡肋是因为他不会实质性的起作用,虽然他是迭代器的入口但却不是迭代的起始点,也因此iterator的__iter__方法可以随意返回self或者self.属性或者None。
使用isinstance(实体名,Iterator)可判断是否为迭代器

3.生成器generator

generator对象是一种特殊的iterator函数,它会在执行过程中保存执行的上下文环境,并在下次循环中从yield语句后继续执行,生成器的标志就是yield关键字。
generator不需要抛出StopIteration异常(你可以看做yield已经在内部实现了StopIteration跳出循环),函数并没有将序列项一次生成,所以generator在实现上可以有无穷个元素,而不需要无穷的存储空间,这在内存优化方面很有用处。
使用isinstance(实体名,Generator)可判断是否为生成器。
生成器的创建办法有两种:
通过函数创建,称作generator function
通过推导式创建,例如g=(x*2 for x in range(10)),称作generator expression

4.推导式

g=(x*2 for x in range(10))

5.其他的内置函数

filter:过滤函数
map:对指定序列做映射,例如都乘以2
zip:合并两个可迭代对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值