zoukankan      html  css  js  c++  java
  • 【python】迭代器与可迭代对象

    【可迭代对象】

    可以直接作用在for循环的对象,拥有__iter__方法,该方法返回一个迭代器(甚至可以只返回一个含__next__方法的对象)

    使用 isinstance(obj, Iterable)判断是否为可迭代对象

    【迭代器】

    在可迭代对象基础上额外拥有__next__方法。

    (事实上,一个迭代器并不需要有__iter__方法,只是出于多态的需要,__iter__方法原则上应该返回自身,详细参见 https://www.zhihu.com/question/44015086)

    使用 isinstance(obj, Iterator)判断是否为迭代器

    迭代器是lazy的,是一个数据流,只有在请求下一个数据的时候才会计算,甚至可以是个无限大的数据流。如果数据没有了,就返回StopIteration

    可以使用 iter(obj)将一个可迭代对象转化为一个迭代器

    【原理】

    for循环,for i in obj。里面的obj是iterable。

    调用iter(obj)得到一个迭代器(甚至不非要是迭代器,只要实现了__next__方法)然后不断调用next方法。

    iter函数首先检查obj是否有__iter__方法,如有,则返回obj.__iter__(),如没有,检查是否有__getitem__方法,如果有该方法返回一个下标迭代器。

    for i in iterable or for i in iterator??

    如果想重头遍历,就要用for i in iterable(注意这个iterable的__iter__方法不能返回自己哦),返回一个新东西。如果想接着遍历,就要用for i in iterator。

  • 相关阅读:
    SEVERE: One or more listeners failed to start.
    springboot junit单元测试报错
    mybatis 日期查询datetime
    设计模式详解之程序设计六大原则
    非maven项目 idea project structure
    jdbcType DATE和TIMESTAMP区别
    mysql 保存23:59:59 自动加一秒
    1、在linux服务器centos虚拟机搭建nginx网站
    QRCode 生成二维码
    CSS3的calc()使用
  • 原文地址:https://www.cnblogs.com/yesuuu/p/15798288.html
Copyright © 2011-2022 走看看