目录

​区别​

​ 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 的区别_生成器

 

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