yield的最简单解释 :yield就是可以用多次的return——每日10行代码22

经常看别人的代码里有yield 子句,不知道是什么意思,今天花功夫了解了下,总结起来就是:yield就是可以用多次的return。

  1. 为什么会有yield?
    yield是为了能够返回多个数据,可能有人会问,我返回多个数据用数组不就可以了吗? 是的,但是假如我要返回的数据有上1亿个,上百亿个呢?要知道数组是放在内存里的,在内存里放百亿个数据,内存不马上就被占满了?所以这时就有了yield。yield的功能就是把所有要返回的数据依次返回。这样就不会占多的内存了。

先看代码:

def foo():	
	yield 7
	yield 3
	

g = foo()
print(next(g))
print(next(g))

输出结果:

7
3

但是假如我用return呢?

def foo():	
	return 7
	return 3


g = foo()
print(g)
print(g)

输出结果:

7
7

因为return只能有一次,遇到第一个return程序就已经结束了,所以3的值始终不会返回。

next()方法是从函数里取回yield的值,上面也说了yield可以一次返回一个值 ,那么在外部调用时就也需要一种方法一次取一个值,这个方法就是next()。

实际上,用了yield后,函数返回值就不是具体的数据了,而是一个生成器对象 :

def foo():	
	yield 7
	

g = foo()
print(type(g))

输出:

<class 'generator'>

目前只需要知道gengrator对象一个重要特性:可迭代

def foo():	
	yield 7
	yield 8
	yield 2
	yield 5
	

g = foo()
for i in g:
	print(i)

输出结果:

7
8
2
5

什么时候需要用yield呢?
当你需要编写一个函数,返回很多数据的时候,并且这些数据是按规律生成的。
比如返回斐波那契数列,返回所有的素数,返回数据库中的所有数据,返回一个特定的规律的字符串组合(如所有ip地址,所有电话号码,所有可能的N位密码组合)……这些只是能想到的用法,其实还应该有很多别的用法。

看完以上内容,yield应该是可以理解了,至于更细节的东西,大家可以自行研究。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值