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别人的博客内容的部分,会尽量附上原文出处,仅供学习交流之用,如有侵权,联系立删。
  • 相关阅读:
    平均值滤波之经典形式改进
    Matlab编程实例(4) 相位角与相关系数曲线
    Matlab编程实例(3) 函数向左或向右平移N点 左移右移
    Matlab编程实例(2) 同期平均
    Matlab编程实例(1) 移动平均
    使用js在网页上记录鼠标划圈的小程序
    《你不知道的JavaScript》整理(五)——值与原生函数
    Vuex 学习总结
    HTML移动端开发常见的兼容性总结
    一步一步实现字母索引导航栏
  • 原文地址:https://www.cnblogs.com/drfxiaoliuzi/p/5735607.html
Copyright © 2011-2022 走看看