Python yield理解

可以使用一个例子理解。设计一个函数输出0到n的平方,设计第一版函数:

def sum_n(n):
	for i in range(n+1):
		print(i**2)

运行函数,sum_n(3)得到以下结果
在这里插入图片描述

这个函数可以打印出我们需要的结果,但是函数的可复用性比较差,因为函数的返回值是None,其他程序无法使用此函数产生的结果。
如果要提高函数的复用性,则可以使用列表将结果保存,第二版函数如下:

def sum_n(n):
	sum_list=[]
	for i in range(n+1):
		sum_list.append(i**2)
	return sum_list

当n=3时,配合for循环,同样可以打印出结果
在这里插入图片描述
而且,这样提高了函数的可复用性,但是,当n比较大的时候,列表占用的内存比较大。如果是在jupyter中运行的话,很多时候回出现kernel dead的情况。

我们既要使得函数具有很好的复用性同事减小内存占用率,所以可以考虑使用yield。yield作用可以先简单粗暴地理解成和print()一样能够运行出结果,但是print是即时可见的,运行到print直接打印出结果,yield可以理解成先把该print的结果保存在一个迭代对象中(反正就是理解为先保存了),如果我们想要具体得到yield的结果,则需要配合for循环。 使用yield的第三版函数如下:

def sum_n(n):
	for i in range(n+1):
		yield i**2

当n=3时,运行结果如下
在这里插入图片描述
有表现形式可以看出,函数使用了yield的结果就像一个列表。我们可以使用for循环 读取这个“列表里的内容”。这里的值是迭代取的,所以占用了很少的内存。为了便于理解,我们可以把它先当成是一个“列表”。但我们要清楚,运行sum_n(3)得到的实际是一个迭代对象,并不是列表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值