python----yield

yeild的用法起源于对于function中return的扩展,在一个function中,一定有一个返回值位于return之后,可以返回数值亦可以返回空值,但是必须要有一个返回数值,标志着这个function的结束。一旦结束,这个function所产生的一切变量就将被抛弃,有没有一个可以使function暂停下来,并且返回到当前所在地方,当接收到继续的命令时可以继续前进的操作呢,也就是所,能够返回一个数值,并且记住返回的位置以便接着开始。这就有点类似下表这个语句:

for i in range():
	pass

这个循环语句中range()这个函数的作用就是生成了一个list,然后从这个list第一个元素开始逐个向后扫描。它的缺点就是会生成一个list,不论这个list有多大,不论for 循环执行多少次,即使一次也不执行,都是会生成这个list(比如你有一个庞大的数据库,那么光是生成一个表单就需要很长时间,然而也许你要用的东西就在前几个,那么你建起这个检索目录远远超过你实际所需要的)。因此range()不是一个好命令。
接下来我们看一下xrange():
xrange()是一个generator生成器,不同于一般的function,里面就包含着yeild。generator是一个生成器,生成什么呢?不妨将其看成一组你需要的序列的函数,通常情况下,我们只需要自然数这种简单的序列,但是如果让你生成一组斐波那契数列呢?这种数列是无穷的,逆向沿着这个数列一直算下去一直算到一个满意的一个属,但是如果你也不知道这个数是在哪里,你就不能提前给出现这个序列,因为你不知道会在哪里停下来。面对这个问题,最好的解决办法就是记住当前的数值,记住当前的地址,查看这个数据符不符合要求,如果不符合要求,那么急需从这个数&地址开始计算下一个斐波那契数字。这就是yeild干的事情。下面是斐波那契数列的yeild实现算法。

# 斐波那契数列:每一个数都等于前两个数之和 
def fib(to=10): 
curr = 0 
next = 1 
count = 0 
while count < to: 
yield curr 
curr = next 
next = curr + next 
count += 1 
# 一个用法例子:每一个斐波那契数列的数加1 
if __name__ == '__main__': 
for x in fib(20): 
print(x+1)



参考:python 中 yield 用法的总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值