ITPub博客

首页 > 数据库 > 数据库开发技术 > Python中的return和yield关键字的用法和区别你知道吗?

Python中的return和yield关键字的用法和区别你知道吗?

原创 数据库开发技术 作者:jackzhang 时间:2024-04-08 23:36:45 0 删除 编辑

引言(Preface)

在 Python 编程中,return 和 yield 是两个重要的关键字,用于从函数中返回值。虽然它们都有返回值的功能,但是它们在用法和场景上有着明显的区别。本文将深入探讨 return 和 yield 关键字的用法及其区别。

return关键字

return 关键字用于从函数中返回一个值,并结束函数的执行。它适用于普通函数,用于计算并返回一个值。return 可以返回单个值,也可以返回多个值,但只有一个返回值会被执行。下面是一个使用 return 关键字的示例:

def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 输出: 8

yield关键字

与return 关键字类似,yield 关键字也表示函数输出。然而,与return 关键字不同的是,yield 关键字用于定义生成器函数,它可以生成一系列的值(即多个输出),并在每次产生值时暂停执行,等待下一次调用(并不会结束函数运行)。yield 适用于需要按需生成大量值或者无限序列的情况,可以节省内存空间。下面是一个使用 yield 关键字的示例:

def generate_numbers():
    yield 1
    yield 2
    yield 3

numbers = generate_numbers()
for num in numbers:
    print(num)
# 输出:
# 1
# 2
# 3
“

Tips:要查看生成器对象(使用了 yield 关键字的对象)的内容,需要对其进行迭代,或者使用 next() 函数逐个获取值。比如, 上面的输出可以用 next() 函数实现:

print(next(numbers))
print(next(numbers))
print(next(numbers))
“

但是,使用 next() 函数时需要注意,如果生成器对象已经产生了所有的值,再次调用 next() 函数会触发 StopIteration 异常,因此通常建议在使用 next() 函数时使用异常处理来避免异常的发生。

try:
    while True:
        print(next(numbers))
except StopIteration:
    print("生成器中的值已经全部获取完毕!")

return VS yield关键字

import numpy as np

numbers = np.random.randint(50, 100, 5)

def return_number(numbers):
    # 生成所有数字,然后一次性返回结果
    result = []
    for number in numbers:
        result.append(f'No.{number}')
    return result


def yield_number(numbers):
    # 生成一个返回一个,重复该过程,直到输出所有数字
    for number in numbers:
        yield f'No.{number}'


if __name__ == '__main__':
    print(f'return keyword: {return_number(numbers)}')

    print('yield keyword: ')
    for item in yield_number(numbers):
        print(item)
  • return 适用于普通函数,用于返回一个值并结束函数的执行。
  • yield 适用于生成器函数,用于生成一系列的值,并在每次产生值时暂停执行。

结论(Conclusion)

return 和 yield 关键字都是 Python 中用于返回值的重要工具,但是它们的用法和场景有着明显的区别。选择使用 return 还是 yield 取决于函数的目的和需求,没有绝对的优劣之分。但是请记住,如果你在处理的数据量大,强烈推荐使用生成器函数(使用 yield 关键字的函数),因为它可以有效节省内存空间,加快处理速度。合理地使用这两个关键字可以使代码更加清晰和高效。

通过本文的介绍,希望读者能够更深入地理解 return 和 yield 关键字的用法,并根据实际情况灵活运用于自己的代码中。


“

如果你觉得这篇文章对你有用,请“点赞➕关注”支持我(关注我,不迷路🤭🤭🤭),你的点赞和关注就是我持续创作分享的动力,让更多的朋友发现并加入我们,共同学习和进步!

Thank you for reading!

- END -

推荐阅读👇👇👇

Python小技巧:连接字符串不要再使用+号了,用这个方法更快

Python小技巧:循环不要再使用loc/iloc啦,用这个让你的代码运行速度更快

Python向量化:让你的程序运行速度爆炸性增长


原文作者:数据派探险家;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-12-19

  • 博文量
    119
  • 访问量
    55947