yield 和 return 都是用来在函数中返回值的关键字,但是它们有一些不同的特点和用法。
return 是用来在函数中返回某个值,并且结束函数的实行,不再连续后面的代码。
yield 是用来在函数中返回一个天生器工具,并且停息函数的实行,直到下一次要求值时连续实行。天生器工具是一种分外的迭代器工具,它可以在循环中动态地天生值,而不是一次性地返回所有的值。利用 yield 的好处是可以节省内存空间,提高性能,以及实现更优雅的编程风格。

下面的例子演示了如何利用 return 和 yield 来创建一个返回奇数的函数:
# 利用 returndef odd_numbers_return(n): # 创建一个空列表 result_list = [] # 从 1 开始循环到 n for i in range(1, n + 1): # 如果 i 是奇数 if i % 2 == 1: # 把 i 添加到列表中 result_list.append(i) # return 在循环外部,一次性返回全体列表 return result_list# 利用 yielddef odd_numbers_yield(n): # 从 1 开始循环到 n for i in range(1, n + 1): # 如果 i 是奇数 if i % 2 == 1: # yield 在循环内部,逐个返回 i yield i# 测试代码n = 10# 调用 return 函数result_list = odd_numbers_return(n)# 打印结果print(result_list)# 调用 yield 函数result_gen = odd_numbers_yield(n)# 打印结果for x in result_gen: print(x, end=" ")print()
输出:
[1, 3, 5, 7, 9]1 3 5 7 9
在这个例子中,利用 return 的函数须要先创建一个列表来存储所有的奇数,然后一次性地返回这个列表,这样会占用更多的内存空间。而利用 yield 的函数则不须要创建列表,而是每次循环时返回一个奇数,这样会节省内存空间,并且可以实现惰性求值,即只在须要时才打算下一个值。