首页 > 解决方案 > 一个函数可以返回多少个值?

问题描述

在python中你可以这样做:

def myFunction():
    return "String", 5.5, True, 11

val1, val2, val3, val4 = myFunction()

我认为这是一个返回 4 个值的函数,但是我的 python 指导员说我错了,而且这只返回一个元组。

我个人认为这是一个没有区别的区别,因为没有迹象表明这四个值被转换成一个元组,然后被解构为 4 个值。我不知道这与 JavaScript 等语言中的相同类型的构造有何不同。

我对吗?

标签: pythonfunctiontuples

解决方案


我会对此进行尝试,因为我认为这里的问题是缺乏正确定义术语。为了完全迂腐,这个问题的正确答案是“零”。Python 不返回值;它返回一个对象,而对象与值不是一回事。回到这个的基础:

https://docs.python.org/3/reference/datamodel.html#objects-values-and-types

对象是 Python 对数据的抽象。Python 程序中的所有数据都由对象或对象之间的关系表示。

还:

每个对象都有一个标识、一个类型和一个值。

如上所述,值与对象不同。函数返回objects而不是values,所以问题的答案(如所问,如果采取字面极端)是零。如果问题是“这个函数返回给调用者的对象有多少?” 那么答案将是一个。这就是为什么定义术语很重要,以及为什么含糊的问题会产生多个(可能是正确的)答案。在另一种意义上,这个问题的正确答案应该是五,因为有五种东西可以被认为是从这个函数返回的“值”。有一个元组,元组里面有四个项目。从另一种意义上说,答案是四(正如你所说),因为代码直截了当地说return然后有四个值。

所以真的,你们都是对的,你们都是错的,但这只是因为问题对于它想知道的内容不够清楚。讲师可能试图提出 Python 返回单个对象的想法,其中可能包含多个其他对象。了解这一点很重要,因为它有助于 Python 在传递数据时的灵活性。我不太确定导师的措辞是否达到了这个目标,但我也没有在课堂上,所以很难说。理想情况下,教学应该涵盖神经多样性的理解方式,但我会把那个肥皂盒留到不同的讨论中。

让我们像这样提炼它,希望能提供一个清晰的总结。Python 不返回值,它返回对象。为此,一个函数只能返回一个对象。该对象可以包含多个值,甚至可以引用其他对象,因此虽然您的函数可以将多个值传回给调用者,但它必须在单个对象内部这样做。“对象”是 Python 内部数据的内部单元,与包含在对象中的“值”明显不同,因此在 Python 中最好始终牢记两者之间的区别以及它们的使用方式,无论问题的措辞如何。


推荐阅读