本文已参与「新人创作礼」活动,一起开启掘金创作之路。 目录
区别
- 使用了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)
运行结果

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)
运行结果
