Python中的迭代器与生成器介绍
一、迭代器iterator
迭代器是访问可迭代对象的工具。
迭代器是指用iter(obj)函数返回的对象
迭代器是可以用next(it)函数获取可迭代对象的数据
1、迭代器函数 iter()与next()
iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是 能提供一个迭代器的对象
next(iterable) 从迭代器iterator中获取下一个记录,如果无法获 取下一条记录,则触发StopIterator异常
说明:
①迭代器只能往前取值,不会后退
②用iter函数可以返回一个可迭代对象的迭代器
示例:
>>> L = [1,3,5,7]
>>> it = iter(L) #让L提供一个能访问自己的迭代器
>>> next(it)
1
>>> next(it)
3
2、迭代器的用途:
可以依次访问可迭代对象的数据(可代替循环遍历)
示例:>>> L = [1,23,45,6]
>>> it = iter(L)
>>> while True:
try:
x = next(it)
print(x)
except StopIteration:
break
二、迭代工具函数:
作用是生成一个个性化的可迭代对象
函数:
zip(iter1 [,iter2[....]])
返回一个zip对象,此对象用于生成元组,此元组的每个数据来源于参数中的可迭代 对象,当最小 的可迭代对象不再提供数据时迭代结束
enumerate(iterable [,start])
生成带索引的枚举对象,返回的迭代类型为索引-值对(index- value),默认索引 从0 开始,也可用 start指定
zip示例:>>> numbers = [10086,10000,10010,95588]
>>> names = ['中国移动','中国联通','中国电信']
>>> for t in zip(numbers,names):
print(t)
(10086, '中国移动')
(10000, '中国联通')
(10010, '中国电信')
enumerate示例:
>>> names = ['中国移动','中国电信','中国联通']
>>> for t in enumerate(names):
print(t)
(0, '中国移动')
(1, '中国电信')
(2, '中国联通')
>>> for t in enumerate(names,101):
print(t)
(101, '中国移动')
(102, '中国电信')
(103, '中国联通')
Python中的迭代器与生成器介绍
一、迭代器iterator
迭代器是访问可迭代对象的工具。
迭代器是指用iter(obj)函数返回的对象
迭代器是可以用next(it)函数获取可迭代对象的数据
1、迭代器函数 iter()与next()
iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是 能提供一个迭代器的对象
next(iterable) 从迭代器iterator中获取下一个记录,如果无法获 取下一条记录,则触发StopIterator异常
说明:
①迭代器只能往前取值,不会后退
②用iter函数可以返回一个可迭代对象的迭代器
示例:
>>> L = [1,3,5,7]
>>> it = iter(L) #让L提供一个能访问自己的迭代器
>>> next(it)
1
>>> next(it)
3
2、迭代器的用途:
可以依次访问可迭代对象的数据(可代替循环遍历)
示例:>>> L = [1,23,45,6]
>>> it = iter(L)
>>> while True:
try:
x = next(it)
print(x)
except StopIteration:
break
二、迭代工具函数:
作用是生成一个个性化的可迭代对象
函数:
zip(iter1 [,iter2[....]])
返回一个zip对象,此对象用于生成元组,此元组的每个数据来源于参数中的可迭代 对象,当最小 的可迭代对象不再提供数据时迭代结束
enumerate(iterable [,start])
生成带索引的枚举对象,返回的迭代类型为索引-值对(index- value),默认索引 从0 开始,也可用 start指定
zip示例:>>> numbers = [10086,10000,10010,95588]
>>> names = ['中国移动','中国联通','中国电信']
>>> for t in zip(numbers,names):
print(t)
(10086, '中国移动')
(10000, '中国联通')
(10010, '中国电信')
enumerate示例:
>>> names = ['中国移动','中国电信','中国联通']
>>> for t in enumerate(names):
print(t)
(0, '中国移动')
(1, '中国电信')
(2, '中国联通')
>>> for t in enumerate(names,101):
print(t)
(101, '中国移动')
(102, '中国电信')
(103, '中国联通')
三、生成器Generator
生成器是指能够动态提供数据的对象,生成器对象也是可迭代对象
生成器有两种:
生成器函数
生成器表达式
生成器函数的定义:
含有yield语句的函数是生成器函数 ,此函数被调用将返回一个生成器对象
yield翻译为产生(或生成)
yield 语句:
语法:
yield 表达式
说明:
yield 用于def函数中,目的是将此函数作用生成器函数使用
yield用来生成数据,共迭代器和next(it)函数使用
生成器函数的说明:
生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象,通常用来动态生成数据
生成器函数调用return语句会触发一个StopIteration异常
**推导式创建生成器
L = [x*x for x in range(10)] #生成一个列表
g = (x*x for x in range(10)) #生成一个生成器
可以利用遍历去除生成器的元素,也可以利用__next__()来逐个取出。
来源:CSDN
作者:好像忘记了
链接:https://blog.csdn.net/extremelove520/article/details/83867570