zoukankan      html  css  js  c++  java
  • Python帮助文档中Iteration iterator iterable 的理解

    iteration这个单词,是循环,迭代的意思。也就是说,一次又一次地重复做某件事,叫做
    iteration。所以很多语言里面,循环的循环变量叫i,就是因为这个iteration。

    iteration指的是循环这个动作本身。而,循环可以做很多事情,一种事情就是便利一个容器里面所有的值
    那么遍历这件事情那么长江,就做了一个理论上的抽象:如果我是为了遍历什么东西而循环,那么就称之为
    我在一个【迭代器】上循环

    iterator,迭代器,就是【循环的那个东西】
    单词结尾的or, 指......的人,比如writer,作家,painter,画家

    iterate,循环,动词,iteration,循环,名词,iterator,循环的东西,就是迭代器

    迭代器有三个操作:判断是不是循环完了,取得当前值,和移动到下一个值。就是C++
    里面的for(iterator it = c.begin(); it != c.end(); ++it){ *it=......;}

    *it是取得当前值,++it是迭代到下一个值(这里就出现了循环的含义了),而it!=c.end()就是
    判断循环是否结束。

    所有可以循环的东西,其实只需要支持这三个值,就能直接拿来循环了。因此Python做了包装,
    认为一个东西是【可循环】的,就是实现了这三种操作的东西

    iterable,iter-able,可循环的。

    一个【可循环】的东西,就是可以得到一个【iterator】迭代器的东西。

    Python通过调用对象身上的__iter__方法获得一个迭代器,而具备__iter__方法的对象,就被
    叫做【可迭代的】,iterable

    在Python里,任何实现了__next__方法的对象,都可以被当作迭代器

    而任何实现了__iter__方法并返回一个迭代器的对象,都可以放在for...in...这里循环
    比如for i in range(100):pass, range返回的对象就实现了__iter__,而range(10).__iter__()返回
    的对象就实现了__next__。range(10)的返回值被称为iterable,iterable.__iter__()的返回值被称为
    iterator,for i in range(10): pass这个过程叫iterate, 这个动作本身作为一个名词讲,就是iteration。


    类比一下,
    __iter__就是c.begin()

    __next__就是*++it

    __next__会抛出一个StopIteration异常,类比于it != c.end()这个行为。

    抛StopIteration异常的这个行为和判断it == c.end()这个行为是等价的。

    实现了一些一样的行为,就成为了一种类型的东西,这种概念,以后会一直遇到。
    C++叫class/template,C#/Java叫interface,Rust/nim叫trait,Python里面没有这个概念,
    但是文档里面还是会经常用到。

    比如callable,任何可以当函数调用的对象,都是callable的,iterable只是类似的概念罢了。

    转载本Blog文章请注明出处,否则,本作者保留追究其法律责任的权利。 本人转载别人或者copy别人的博客内容的部分,会尽量附上原文出处,仅供学习交流之用,如有侵权,联系立删。
  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
  • 原文地址:https://www.cnblogs.com/drfxiaoliuzi/p/5735607.html
Copyright © 2011-2022 走看看