迭代器与生成器:
01、迭代器
①、iter函数
②、next函数
③、自定义迭代器
02、生成器
①、生成器表达式
②、yield函数
前言
废话不多说,跟着上面的列举的目录点,下来来具体介绍:
一、迭代器
定义:迭代器(Iterator)是指可以通过next函数不断获取下一个值的对象。
在python中生成迭代器的方式有两种:
第一种,是利用iter()函数把python中常用的可迭代对象转换为迭代器,具体看我下面代码,结合我代码备注则可了解。
第二种,是在for循环中使用小括号来生成迭代器,具体看我下面代码,结合我代码备注则可了解。
迭代器生成后,使用next()函数来调用输出值。
代码如下(示例):
#定义一个list:
list01 = [1,3,4,5,7]
#利用iter函数把list转换为迭代器
list_iter = iter(list01)
#利用next()方法来访问输出生成的迭代器里面值,print一次只输出一个值:
print("第一次输出", next(list_iter))
print("第二次输出", next(list_iter))
2.第二种方法,利用for循环加小括号()来生成迭代器
代码如下(示例):
#用小括号则生成生成器,也可以节约内存,访问里面的数据用for循环去遍历:
list01 = (i*i for i in range(1,10) if i % 2 == 0)
#生成迭代器list01后,可用for循环来遍历,输出它里面的数据:
for o in list01:
print("循环输出",o)
#也可以用next()方法来一个一个输出值,print一次则输出一个值:
print("第一次输出", next(list01))
print("第二次输出", next(list01))
# 注意:上面for循环把list01里面的数据,全部输出后,下面再print,则会报错。这个和迭代器的特性:数据都是主保存在一个变量里面有关
---
# 一、迭代器
**定义:迭代器(Iterator)是指可以通过next函数不断获取下一个值的对象。**
**在python中生成迭代器的方式有两种:**
第一种,是利用iter()函数把python中常用的可迭代对象转换为迭代器,具体看我下面代码,结合我代码备注则可了解。
第二种,是在for循环中使用小括号来生成迭代器,具体看我下面代码,结合我代码备注则可了解。
**迭代器生成后,使用next来调用输出值。**
# 二、使用步骤
## 1.第一种方法,用iter()函数来生成迭代器
代码如下(示例):
```c
#定义一个list:
list01 = [1,3,4,5,7]
#利用iter函数把list转换为迭代器
list_iter = iter(list01)
#利用next()方法来访问输出生成的迭代器里面值,print一次只输出一个值:
print("第一次输出", next(list_iter))
print("第二次输出", next(list_iter))
一、生成器
**定义:~~在python中使用了yield的函数被称为生成器(generator)
**生成器其实也是一种迭代器,因为它直接用yield来生成,所以更简单,方便。
**生成器生成后,主要用next()函数来调用输出值。
代码如下(示例):
def func():
for i in range(0, 3):
“”“yield可以简单看做return函数,程序运行到这里就直接返回i值”“”
yield i
“”“第二次运行next函数时候,会从上次运行到yield处向下运行,运行完再返回再次运行func()函数,然后遇到yield再次退出函数并且第二次运行函数,程序还会记得上二一次退出函数时,yield的值”“”
print(“第二次运行函数,print打印i的值,实际是第一次函数返回的i值:”,i)
f = func()
print(“第一次运行函数,函数返回i的值:”,next(f))
print(“*”*20)
print(“第二次运行函数,函数返回i的值:”,next(f))
迭代器和生成器主要作用:
1、用于特殊场景下,如:需要每次调用只输出一次值,二次调用时,还会从上次退出地方再次执行输出。
2、节约内存,如果用list等数据类型,就要保存所有的变量数据,但是迭代器和生成器,则只会以遍历方式,来保存一个或几个变量,大大节约了内存资源,如:爬虫时候,需要把爬取到的成千上万个图片uil临时保存保存,如果用生成器来存储则更加节省内存



