怎么在Python中使用迭代器和生成器

  介绍

怎么在Python中使用迭代器和生成器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>迭代器和生成器

<强>迭代器

<李>

每次可以返回一个对象元素的对象,例如返回一个列表。我们到目前为止使用的很多内置函数(例如列举)都会返回一个迭代器。

<李>

是一种表示数据流的对象。这与列表不同,列表是可迭代对象,但不是迭代器,因为它不是数据流。

<强>生成器

<李>

是使用函数创建迭代器的简单方式。也可以使用类定义迭代器

下面是一个叫做my_range的生成器函数,它会生成一个从0到(x - 1)的数字流:

def  my_range (x):   小姐:才能=0   while 才能小姐:& lt;, x:   ,,,油品收率   ,,,小姐:+=,1

该函数使用了产量而不是关键字回报。这样使函数能够一次返回一个值,并且每次被调用时都从停下的位置继续。关键字<代码> 是收益率将生成器与普通函数区分开来的依据。

因为上述代码会返回一个迭代器,因此我们可以将其转换为列表或用的循环遍历它,以查看其内容,例如,下面的代码:

for  x 拷贝my_range (5):   打印才能(x)

输出如下:

0
1
2
3
4

<强>为何要使用生成器?

<李>

生成器是构建迭代器的“懒惰”方式。当内存不够存储完整实现的列表时,或者计算每个列表元素的代价很高,你希望尽量推迟计算时,就可以使用生成器。但是这些元素只能遍历一次。

<李>

由于使用生成器是一次处理一个数据,在内存和存储的需求上会比使用方列表式直接全部生成再存储节省很多资源。由此区别,在处理大量数据时,经常使用生成器初步处理数据后,再进行长期存储,而不是使用列表。

<李>

因为无论使用生成器还是列表,都是使用过就要丢弃的临时数据。既然功能和结果一样,那就不如用生成器。

<李>

但是生成器也有自己的局限,它产生的数据不能回溯,不像列表可以任意选择。

<强>迭代器和生成器(相关练习)

请自己写一个效果和内置函数列举一样的生成器函数。如下所示地调用该函数:

lessons =, (“Why  Python  Programming",,“Data  Types 以及Operators",,“Control  Flow",,“Functions",,“Scripting"】   for 我,lesson 拷贝my_enumerate(课,1):   打印才能(“Lesson  {}: {}“.format(我,教训))

应该会输出:

教训1:为什么Python编程
2课:数据类型和运算符
3课:控制流
4课:函数
5课:脚本

解决方案:

lessons =, (“Why  Python  Programming",,“Data  Types 以及Operators",,“Control  Flow",,“Functions",,“Scripting"】   def  my_enumerate (iterable,,开始=0):   #,才能Implement  your  generator  function 这里   小姐,=,才能开始   for 才能;element  iterable:拷贝   ,,,油品收率,元素   ,,,小姐:+=1   for 我,lesson 拷贝my_enumerate(课,1):   打印才能(“Lesson  {}: {}“.format(我,教训))

如果可迭代对象太大,无法完整地存储在内存中(例如处理大型文件时),每次能够使用一部分很有用。实现一个生成器函数块,接受一个可迭代对象并每次生成指定大小的部分数据。如下所示地调用该函数:

for  chunk 拷贝块(范围(25),4):   打印才能(列表(块))

应该会输出:

,[0,1,2,3]
,(4、5、6、7)
,(8、9、10、11)
,(12、13、14、15)
,(16、17、18、19)
,(20、21、22、23)
,[24]

解决方案:

def 块(iterable,大小):   for 才能小姐:拷贝范围(0,,len (iterable),大小):   ,,,油品收率iterable(我:小姐:+,大小)   for  chunk 块拷贝(范围(25),4):   打印才能(列表(块)) python的五大特点是什么

python的五大特点:1。简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2。面向对象,与其他主要的语言如c++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。3。可移植性,Python程序无需修改就可以在各种平台上运行。4。解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5。开源,Python是牙线(自由/开放源码软件)之一。

怎么在Python中使用迭代器和生成器