Python中的多值返回

2025年3月6日 | 阅读 6 分钟

本教程将指导你如何在 Python 编程语言中返回多个值。

如何在 Python 中返回多个值?

Python 中,我们可以通过不同的方式从函数返回多个值。以下是一些用于返回多个值的方法:

  1. 使用对象
  2. 使用元组
  3. 使用列表
  4. 使用字典
  5. 使用数据类 (Python 3.7+)
  6. 使用 'yield' 关键字

现在让我们通过示例来讨论这些方法。

使用对象返回多个值

这种方法类似于 C/C++ 和 Java,我们可以创建一个类(在 C 中是 struct)来存储多个值并返回该类的一个对象。

让我们看下面的例子来演示这一点。

示例

程序说明

利用类从函数返回多个值的想法在此 Python 程序中得到了演示。TestClass 类的两个属性是 x 和 str。Test 类的一个实例由 fun 方法创建并返回。使用驱动代码中的 test_function(),可以通过将返回的对象赋给变量 test 来访问其属性(str 和 x)。之后,程序输出各种属性的值,展示了类实例如何返回和使用多个值。

输出

 
javatpoint
48   

对于那些希望改变 C++/Java 世界的人来说,这里有几种有趣的方法。

使用元组返回多个值

由逗号分隔的一系列项称为元组。元组是不可变的,可以使用 () 或不使用 () 来创建。

让我们考虑以下示例,演示在函数中返回多个值时使用元组。

示例

程序说明

此 Python 程序中的 sample_function() 函数使用元组返回多个值。在函数中,将 str 和 x 这两个变量赋予了特定值。然后将这些值创建为一个元组,并通过 return str, x 指令返回。驱动代码使用表达式 str, x = sample_function() 将返回的元组解包到变量 str 和 x 中。该程序最终输出这些变量的值,展示了通过元组返回和使用多个值的能力。

输出

 
javatpoint
20   

使用列表返回多个值

由方括号创建的对象数组类似于列表。它们与数组的不同之处在于可以包含多种项类型。列表与元组不同,因为列表是可变的。

让我们考虑以下示例,演示在函数中返回多个值时使用列表。

示例

程序说明

这个 Python 程序展示了如何使用列表从方法中返回多个值。在 sample_function() 函数中,将 str 和 x 这两个变量赋予了特定值。然后通过 return [str, x] 命令将这些值创建并作为列表返回。在驱动代码中,返回的列表存储在名为 list 的变量中,并且应用程序会输出整个列表。这表明了如何使用列表来打包和返回函数中的多个值。

输出

 
['javatpoint', 20]   

使用字典返回多个值

Python 中的 字典类似于其他语言中的哈希或映射。

让我们考虑以下示例,演示在函数中返回多个值时使用字典。

示例

程序说明

此 Python 程序展示了如何使用字典从方法中返回多个值。sample_function 函数在初始化时为字典 (some_dictionary) 的键 ('str' 和 'x') 设置了值。然后函数返回该字典。在驱动代码中,返回的字典存储在名为 some_dictionary 的变量中,并且应用程序会输出整个字典。这表明了如何使用字典来存储和检索多个值,每个值都与一个唯一的键相关联。

输出

 
{'str': 'JavatPoint', 'x': 20}   

使用数据类返回多个值 (Python 3.7+)

在 Python 3.7 及更高版本中,可以使用数据类返回自动添加了特殊方法的类。数据类模块提供了装饰器和函数,用于自动将生成的特殊方法(包括 __init__() 和 __repr__())添加到用户定义的类中。

让我们看下面的例子来演示这一点。

示例

程序说明

提供的 Python 程序的数据类模块用于定义 BookList 类。该类表示一本图书,具有名称、单价和可用数量等属性。类中包含一个名为 totalCost 的方法,用于计算图书的总成本,该方法考虑了数量和单价。总成本使用 totalCost 函数计算,并创建了一个 BookList 类的特定实例。通过 print 语句,程序然后输出图书的信息及其总成本。最后一个 print 语句中还有一个小错误;它应该打印 book 实例,而不是生成新实例。

输出

 
2250
BookList(book_name='Introduction to Programming', cost_per_unit=450, available_quantity=5)   

使用 'yield' 关键字返回多个值

在 Python 中,使用生成器函数中的 yield 关键字是从函数返回多个值的另一种方法。生成器函数是一种特殊的函数,它会生成一个迭代器对象,该对象会动态地一次生成一个值。

为了返回多个值,可以在生成器函数中使用 yield 关键字逐个生成每个结果。之后,生成器函数将停止执行,直到接收到请求下一个值的请求,届时它将重新开始执行并输出所需的值。此过程将一直持续到生成器函数遇到 return 语句或执行完毕。

让我们看下面的例子来演示这一点。

示例

程序说明

提供的 Python 代码生成了一个名为 get_values 的生成器函数。它使用 yield 关键字定义了一个列表 [5, 8, 12]、一个整数 93 和一个文本 'welcome to javatpoint .'。结果是创建了一个生成器,并且使用 next() 方法按顺序检索由迭代器生成的值。首先,通过 next(result) 打印 93;其次,打印 'welcome to javatpoint';最后,打印列表 [5, 8, 12]。这说明了生成器在 Python 中的工作原理,它允许渐进地生成值,而无需在内存中同时存储它们。

输出

 
93
welcome to javatpoint
[5, 8, 12]   
  • 时间复杂度: O (1),因为无论输入大小如何,它只执行固定数量的操作(yield)。
  • 辅助空间: 因为它在任何给定时刻只在内存中保留固定数量的变量(yield 的值),所以辅助空间具有 O (1) 的内存占用。