zoukankan      html  css  js  c++  java
  • 可迭代对象(Iterable)和迭代器(Iterator)

     迭代是访问集合元素的一种方式。

    迭代器是一个可以记住遍历的位置的对象。

    迭代器对象从集合的第一 个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    1. 可迭代对象 以直接作用于 for 循环的数据类型有以下几种:

      一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;

      一类是 generator ,包括生成器和带 yield 的generator function。

    这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。

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

    from collections import Iterable

    print(isinstance([],Iterable)) # 列表 True
    print(isinstance((),Iterable)) # 元组 True
    print(isinstance({},Iterable)) # 字典 True
    print(isinstance('meng',Iterable)) #字符串 True
    print(isinstance((x for x in range(5)),Iterable)) #生成器 True

    结果为:都为True, 说明容器和生成器都是可迭代对象

    3. 迭代器:

    from collections import Iterator
    
    print(isinstance([],Iterator))  # 列表  False
    print(isinstance((),Iterator))  # 元组  False
    print(isinstance({},Iterator))  # 字典  False
    print(isinstance('meng',Iterator))  # 字符串  False
    print(isinstance((x for x in range(5)),Iterator)) # 生成器  True

    由此结果可以看出:容器只是可迭代对象,并不是迭代器

    4. iter()函数:

    生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。 把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数:

    print(isinstance(iter([]),Iterator))  # 列表  True

    总结:

      凡是可作用于 for 循环的对象都是 Iterable 类型;

      凡是可作用于 next() 函数的对象都是 Iterator 类型

      集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个

  • 相关阅读:
    navBar
    strong ,weak
    Linux基础-07-系统的初始化和服务
    Linux基础-06-vi编辑器
    Linux基础-05-正文处理、tar、解压缩
    Linux基础-04-权限
    Linux基础-03-用户、群组
    Linux基础-02-目录文件管理
    Linux基础-01-Linux基础命令
    oh my zsh 安装
  • 原文地址:https://www.cnblogs.com/mswei/p/9283297.html
Copyright © 2011-2022 走看看