Python核心编程的——迭代器

格桑2021-12-28 11:42

  先抛出两个概念:可迭代对象,迭代器。

  任何可以通过for循环通过其中的元素的对象都是可迭代的对象;之前学过的组合数据类型list(列表)、tuple(元组)、dict(字典)、集合(set)等。上一节介绍的生成器也可以通过for循环通历。所以生成器也是迭代器,但迭代器不一定是生成器,比如组合数据类型。

Python核心编程的——迭代器

  任何可以通过next访问的值得对象都是迭代器,生成器是迭代器。可以看出,生成器不仅可以通过for循环获得值,还可以通过next()获得。

  Python中有一个库colections,通过库的Iterable方法来判断一个对象是否是可迭代对象;如果返回值为True,则表示该对象为可迭代,如果返回值为False,则表示该对象为不可迭代。用Iterator法来判断一个对象是否是迭代器,并根据返回值来判断它是否是迭代器。

  用Iterable来判断列表、字典、字符串以及一个整数类型是否是可迭代对象的代码如下:

from collections import Iterable

def isiterable():
 """分别判断列表,字典,字符串100,整形100是不是可迭代对象"""

 ls = isinstance([],Iterable)
 dic = isinstance({},Iterable)
 strs = isinstance('100',Iterable)
 ints = isinstance(100,Iterable)
 print('输出True表示可迭代,False表示不可迭代\n\
 ls为{},dic为{},strs为{},ints为{}'.format(ls,dic,strs,ints))

def main():
 isiterable()

if __name__ == '__main__':
 main()

  输出结果如下:

Python核心编程的——迭代器

  用Iterator判断对象是否为迭代器的代码如下,类似于判断是否为可迭代对象:

from collections import Iterable,Iterator


def print_num():
 """定义一个产生斐波那契数列的生成器"""
 a,b = 0,1
 for i in range(1,10):
   yield b
   a,b = b,a + b

def isiterator():
 """分别判断列表,字典、生成器是否为迭代器"""

 ls_ret = isinstance([],Iterator)
 dict_ret = isinstance({},Iterator)
 genarate_ret = isinstance((x * 2 for i in range(10)),Iterator)
 print_num_ret = isinstance(print_num(),Iterator)
 print('输出True表示该对象为迭代器,False表示该对象不是迭代器\n\
   ls输出为{},dict输出为{},genarate输出为{},print_num输出为{}'.format(ls_ret,dict_ret,genarate_ret,print_num_ret))

def main():
 isiterator()

if __name__ == '__main__':
 main()

  输出结果如下:

Python核心编程的——迭代器

  组合数据类型不是迭代器,而是可迭代对象。它可以通过iter()函数转换到位置迭代器,以便使用next方法获得对象中每个元素的值。代码如下:

from collections import Iterable,Iterator

def trans_to_iterator():
 """使用iter()将可迭代类型-列表转换为迭代器"""

 ls = [2,4,6,8,10]
 ls_ierator = iter(ls)
 ls_ierator_is = isinstance(ls_ierator,Iterator)
 print('转换后的返回值为{},使用next取出的第一个元素的值为{}'.format(ls_ierator_is,next(ls_ierator)))
def main():
 trans_to_iterator()

if __name__ == '__main__':
 main()

  输出结果如下:

Python核心编程的——迭代器

  以上就是小编为大家整理发布的“Python核心编程的——迭代器”一文,更多相关内容尽在开课吧广场Python教程频道。

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享