在了解yield之前,先了解return概念
1.return
- return: 1个返回值
结束函数的运行,并且将结果返回给调用的地方
- return:函数的返回值
返回对个返回值,其返回值会保存在一个元组中
如下:
def sum(x,y):
return x,y
num = sum(1,2)
print(num)
2.yield
使用yield会将一个函数变成一个生成器(generator)
如下:
def getNum(n):
i = 0
while i <= n:
yield i #将函数变成一个generator
i+=1
print(getNum(5))
结果:
<generator object getNum at 0x0000000002528C00>```
使用生成器 通过 next()方法
a = getNum(5) #把生成器赋值给一个变量a
print(next(a)) #输出yield返回的值
并且会抛异常,需要手动抛异常StopIteration
- 如果使用for循环不需要抛出异常
for i in a:
print(i)
3.yield作用
使用生成器可以达到延迟操作的效果,所谓延迟操作就是指在需要的时候
产生结果而不是立即产生就结果,节省资源消耗,在不使用的时候几乎是不占内存的
4.迭代器
首先了解下什么是迭代对象
- 迭代对象
可以用for in 遍历得对象度可以叫做是可迭代对象:Iterable
如:list string dict
list01 = [1,2,3,4,5] #是一个可迭代对象
for i in list01:
print(i)
print(next(list01)) #list01不是迭代器所以无法调用 next
报错:
list不是一个迭代器,则无法使用next函数
'list' object is not an iterator
- 迭代器
可以被next()函数调用的并不断返回下一个值得对象叫做迭代器:iterator
通过iter()将一个可迭代对象变成迭代器
a = iter(list01)
print(a)
print(next(a))
结果:
<list_iterator object at 0x0000000002E554A8>
1