当前位置: 首页 > 编程笔记 >

对Python中Iterator和Iterable的区别详解

易星纬
2023-03-14
本文向大家介绍对Python中Iterator和Iterable的区别详解,包括了对Python中Iterator和Iterable的区别详解的使用技巧和注意事项,需要的朋友参考一下

Python中 list,truple,str,dict这些都可以被迭代,但他们并不是迭代器。为什么?

因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少事可知的。但迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。

判断是不是可以迭代,用Iterable

from collections import Iterable
isinstance({}, Iterable) --> True
isinstance((), Iterable) --> True
isinstance(100, Iterable) --> False

判断是不是迭代器,用Iterator

from collections import Iterator
isinstance({}, Iterator) --> False
isinstance((), Iterator) --> False
isinstance( (x for x in range(10)), Iterator) --> True

所以,

凡是可以for循环的,都是Iterable

凡是可以next()的,都是Iterator

集合数据类型如list,truple,dict,str,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象

Python中的for循环就是通过next实现的

for x in [1,2,3,4,5]:
 pass

等价于

#先获取iterator对象
it = iter([1,2,3,4,5])
while True:
 try:
  #获取下一个值
  x = next(it);
 except StopIteration:
  # 遇到StopIteration就退出循环
  break

以上这篇对Python中Iterator和Iterable的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Java中Iterator和Spilled Iterator的区别。,包括了Java中Iterator和Spilled Iterator的区别。的使用技巧和注意事项,需要的朋友参考一下 迭代器和拆分迭代器这两个接口都用于迭代集合。 Java 8中引入了拆分迭代器来实现并行性。它可以拆分给定的元素集,并可以使用不同的独立线程并行执行操作。它可以并行地以及顺序地遍历元素。splitIte

  • 我对Java还很陌生,今天我试图理解迭代器的使用。 所以我有几个问题: > 为什么我需要实现Iterable呢?它只提供了一个为集合创建新迭代器的方法,但如果我想获取所有元素,我也可以使用普通的或增强的for循环。我已经读过这个问题:可迭代接口用于什么?还有更多,但他们只是说它允许你遍历所有元素,这又回到了我的问题。 如果我实现了Iterable,我也应该实现迭代器吗 因为这一个实际上提供了可用于

  • 本文向大家介绍Python中__init__和__new__的区别详解,包括了Python中__init__和__new__的区别详解的使用技巧和注意事项,需要的朋友参考一下 __init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候。例如: 这样便是__init__最普通的用法了。但

  • 本文向大家介绍对python 中re.sub,replace(),strip()的区别详解,包括了对python 中re.sub,replace(),strip()的区别详解的使用技巧和注意事项,需要的朋友参考一下 1.strip(): str.strip([chars]);去除字符串前面和后面的所有设置的字符串,默认为空格 chars -- 移除字符串头尾指定的字符序列。 输出: 如果设置了字符

  • 本文向大家介绍ipython和python区别详解,包括了ipython和python区别详解的使用技巧和注意事项,需要的朋友参考一下 ipython介绍 IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell命令,内置了许多很有用的功能和函数。 IPython 是基于BSD 开源的。 IPyt

  • 问题内容: 我对所有有趣的迭代器都非常着迷,但是我感到困惑的是这两个函数之间的区别以及为什么存在。 两种功能有什么区别? 问题答案: 前者只能处理不可打包的迭代。后者可以处理无法完全解包的可迭代对象,例如无限生成器。 考虑 此外,仅拆箱操作是一项急切的,前期成本高的活动,因此,如果您的迭代有效果,则希望懒惰地进行评估,这是您的最佳选择。