Python学习笔记-04-迭代器和解析之初见

惊鸿一瞥


中华文化博大精深,我想先就本次主题中的关键字迭代器的相关术语进行区分定义,然后再开展之后的分析,好了,我们开始吧!

  • 可迭代对象:可迭代对象是指那些可以被用来迭代的对象,通俗的说就是可以被迭代工具迭代的对象。例如Python中的列表,元组,字符串以及range( I )、zip(seq1, seq2)、map(fun, seq)、filter(fun, seq),open( file ),os.popen( shell )等函数返回的结果都可以称之为可迭代对象,他们遵守迭代协议,能够被依次从左至右的顺序进行扫描。

  • 迭代器:这个概念与上面的概念有所不同,如果从集合论的角度看的话,二者之间应该是真包含的关系,即可迭代对象真包含迭代器,就好比NP真包含P,因为所有的迭代器一定是可迭代的,但并非所有的可迭代对象都是迭代器。

    定义:指的是iter函数调用所返回的一个支持next(I)的对象。一般可以采用 iter(obj) == obj来判断对象自身是否就是自身的迭代器。

    例如:列表是可迭代的对象,但却不能称之为迭代器,os.popen( )函数返回的结果是可迭代的对象,但是也不能称之为迭代器。前者很好理解,后者可能有点费解,首先os.popen()函数的参数是shell命令,该函数返回的结果便是shell命令输出的结果近似迭代器版本。由于os.popen()返回的结果不支持内置的next()函数,只支持自身的_ _ next_ _ ( )方法,所以不能称之为迭代器。

    例如常见的迭代器有,zip(seq1, seq2)、map(fun, seq)、filter(fun, seq),open( file )函数返回的结果。

  • 迭代工具:使用迭代协议迭代可迭代对象的工具。例如for循环,列表解析,in成员关系测试,map(),zip(),filter(),range(),list(),tuple(),sorted(),reversed()内置函数,这些函数使用迭代协议作用于传入的参数,所以可以称之为迭代工具,而且前面三个的返回值同时还是迭代器!后两个返回的结果是列表!还有字符串的join方法,甚至包括序列赋值!functools.reduce(),enumerate(),sum(),any(),all(),max(),min()

  • 迭代协议:有_ _ next _ _方法的对象会前进到下一个结果,而在一系列结果的末尾时,则会引发StopIteration异常。


代码示例


  • 多个迭代器 VS 单个迭代器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值