生成器
概述
生成器是能够动态提供数据的对象,生成器对象也是可迭代对象(实例)
生成器有生成器函数和生成器表达式两种
生成器函数
概述
含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象。yield 翻译为(产生或生成)
yield语句
语法:yield 表达式
(1)yield 用于def函数中,目的是将此函数作用生成器函数使用
(2)yield 用来生成数据,供迭代器的next(it)函数使用
示例
# coding:utf-8
def my_yield():
yield "a"
yield "b"
yield "c"
yield "d"
gen = my_yield()
print("gen:", gen) # gen为生成器对象 <generator object my_yield at 0x00000000063E34C0>
it = iter(gen) # 用生成器返回一个迭代器
while True:
try:
print(next(it)) # next():生成器函数才开始执行
except StopIteration:
print("循环结束")
break
生成器表达式
概述
语法: (表达式 for 变量 in 可迭代对象 [if 真值表达式 ])
说明: if 子句可以省略
作用: 用推导式的形式创建一个新的生成器
示例
# coding:utf-8
gen = [x for x in range(1,20) if x%2 ==0]
it = iter(gen)
while True:
try:
print(next(it))
except StopIteration:
print("循环结束")
break