对比 yield和return 的区别
原创
©著作权归作者所有:来自51CTO博客作者lanxiaofang的原创作品,请联系作者获取转载授权,否则将追究法律责任
目录
区别
1 使用yield关键字
运行结果
2 生成器使用return关键字
运行结果
区别
- 使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器)
- 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
- 每次启动生成器都会返回一个值,多次启动可以返回多个值,也就是yield可以返回多个值
- return只能返回一次值,生成器里面使用return关键字语法上没有问题,代码执行到return语句就停止迭代,抛出停止迭代异常
1 使用yield关键字
def fibonacci(num):
a = 0
b = 1
# 记录生成fibonacci数字的下标
current_index = 0
print("01")
while current_index < num:
result = a
a, b = b, a + b
current_index += 1
print("02")
# 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
yield result
print("03")
fib = fibonacci(5)
value = next(fib)
print('-0-', value)
value = next(fib)
print('-1-', value)
value = next(fib)
print('-2-', value)
for value in fib:
print('--for-', value)
运行结果
![对比 yield和return 的区别_生成器](https://s2.51cto.com/images/blog/202208/20074400_63002040a083b51644.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
2 生成器使用return关键字
def fibonacci(num):
a = 0
b = 1
# 记录生成fibonacci数字的下标
current_index = 0
print("1")
while current_index < num:
result = a
a, b = b, a + b
current_index += 1
print("2")
# 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
yield result
print("3")
return 'fibonacci return'
fib = fibonacci(5)
value = next(fib)
print(value)
try:
value = next(fib)
print(value)
except StopIteration as e:
# 获取return的返回值
print(e.value)
运行结果
![对比 yield和return 的区别_迭代_02](https://s2.51cto.com/images/blog/202208/20074400_63002040cf11e93745.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)