python 生成器和yield语句

生成器
  1. 生成器是可以动态(循环一次计算一次返回一次)提供数据的可迭代对象(所以属于可迭代对象,即有__iter__()和__next__())
  2. 不必创建容器存储完整的结果,而节省内存空间(延迟/惰性操作)
  3. 含有yield语句的函数为生成器函数,返回值为生成器对象
普通可迭代对象和生成器对比

定义函数,获取列表中所有偶数

list01 = [4,54,65,6,76,87,9]

#传统方式
def get_even01():
	#做一个容器来存储数据
	result = []
	for item in list01:
		if item % 2 == 0:
			result.append(item)
	return result

re = get_even01()
for item in re:
	print(item)

#使用生成器技术
def get_even02():
	for item in list01:
		if item % 2 == 0:
			yield item	#yield是生成器的关键词

re = get_even02()	#返回一个生成器对象
for item in re:	#使用for来迭代re,因为生成器也是可迭代对象(有__iter__()方法)
	print(item)

使用生成器的最大作用是节省内存

yield语句
def f1():
	for i in range(2):
		yield i
		
g = f1()	

print(g.__next__())	#0
print(g.__next__())	#1
print(g.__next__())	#抛出异常StopIteration

#为了不抛出异常,改写上面的代码
def f1():
	for i in range(2):
		yield i
g = f1()
while True:
	try:
		print(g.__next__())
	except Exception as e:	#捕获异常,结束循环
		break		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值