# 前言 学习日记01-4
一.生成器generator
生成器表达式只有2种:
- 1.tu=(i for i in range(10))—({ }[] 是推导式)
- 2.yield, 通过yield自定生成器,yield只能用在函数里面,后面再学。。。
- next()生成器取值
列表推导式
a=[i+1 for i in range(10)]
print(a)
>>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1.生成器
generator_ex=(i+1 for i in range(10))
print(next(generator_ex))
print(generator_ex)
>>>>> 1 <generator object <genexpr> at 0x000000000268CAF0>
2.yield生成器
def gen_fun():
yield 1
print('测试生成器输出')
yield 2
yield 3
res=gen_fun()
print(next(res))
print(next(res))
>>>1 测试生成器输出 2
生成器取值可以使用for循环:
generator保存的是算法,每次调用next(generaotr_ex)就计算出他的下一个元素的值,直到计算出最后一个元素,没有更多的元素时,抛出StopIteration的错误,而且这样不断调用是一个不好的习惯,正确的取值方法是使用for循环,因为generator也是可迭代对象:
生成器
generrator_ex=(i+1 for i in range(5))
for i in generrator_ex:
print(i)
二.迭代器Iterator(也是循环)
- 凡是可作用于for循环的对象都是Iterable可迭代的类型;
- 凡是可作用于next()函数的对象都是Iterator迭代器类型,它们表示一个惰性计算的序列;
- 生成器多了三种方法:send():发送数据; close:关闭生成器;throw。