学习日记01-4_generator生成器 and 迭代器Iterator



# 前言 学习日记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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值