生成器、迭代器

1.生成器

一边循环,一边计算的机制,称为生成器:generator

创建一个generator 只需要把list的 [ ] 换成 () 即可称为一个generator

next() 函数可以获得generator的下一个值,但是很多一个个很麻烦,一般用for循环遍历generator。

  • 比较复杂的需要写成函数如斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到                                       
    这个时候要把它变成generator只需要把print(c)改为yield。
  • 有yield关键字的函数就是generator。函数执行时遇到yield 返回,再次调用时从上次的yield中断处继续执行。
    第一次调用返回1,第二次调用才开始对下面的b,c做处理。

但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIterationvalue
【具体为啥,我现在还不知道

杨辉三角的程序

下一行比上一行多一个元素,所以先加一个0;然后下面根据上一行的值计算新的一行的值,

 

 

 

2.迭代器

就是可以被next()调用,并且不断返回值的对象是迭代器:iterator

生成器都是iterator;

list   str dict 都是可迭代对象(iterable)但是不是iterator

将list str dict 变为Iterator 需要用iter 函数

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值