生成器 Generator
什么 是生成器?
生成器是能够动态提供数据的可迭代对象
生成器在程序运行时生成数据,与容器类不同,不会在内存中缓存大量数据,现用现生成
好处
不占用计算机内存
生成器种类
生成器函数
生成器表达式
生成器函数的定义
含有yield函数的语句是生成器函数,此函数被调用返回一个生成器对象
yield:产生
Yield 语句
- 语法
-yield 表达式 - 说明:
yield 只用于def 目的是将此函数作为生成器 使用
返回一个生成器对象,生成器对象是一个可迭代对象
生成器是一次性的
一旦生成结束,将不再生成新的数据
示例1:
def myin(n):
i =0
while 1<n:
i += 1
for x in myin(3):
print(x)
print('-'*50)
L = [x for x in myin(100) ]
print(L)
示例2:
def myeven(start,stop):
while start<stop:
if start % 2 == 0:
yield start
start += 1
evens = list(myeven(10,20))
print(evens)
for x in myeven(21,30):
print(x)
生成器表达式
- 语法:
(表达式 for 变量 in 可迭代对象 [ if 真值表达式]) - 作用:
用推导式创建一个新的生成器 - 说明:
if 可以省略
可以像列表生成时一样嵌套 - 示例:
gen = (x**2 for x in range(1,5))
it = iter(gen)
next(it) # 1
迭代工具函数
迭代工具函数的作用是生成一个符合条件的可迭代对象
zip(iter[,iter2[,…]])
返回一个zip生成器对象用于生成一个元组此元组分别来自参数中的每一个可迭代对象,生成元祖的个数由最小的一个可迭代对象决定、
enumerate(iterable, start=0)
返回一个enumerate生成器对象,此对象生成类型为(索引,键值)的元组,默认从0开始,也可以指定start。
示例zip:
number = [10086,10000,10010,10001]
names = ['移动','电信','联通']
for t in zip(number,names):
print(t)
示例enumerate:
names = ['移动','电信','联通']
for n in enumerate(names,30):
print(n)
本文深入探讨生成器和迭代器的概念,解析生成器函数与表达式的语法及用途,通过实例展示如何使用yield语句创建生成器,以及介绍生成器的一次性特性。同时,文章还讲解了zip和enumerate等迭代工具函数的使用方法。
680

被折叠的 条评论
为什么被折叠?



