我不了解MATLAB中的nargout
,也无法想象应该如何正确使用它。然而,您可能希望将重点转向Python函数(或方法)的实际作用。
实际上,Python始终只返回一个值。它要么是None,要么是某种特定类型的单个值,要么是tuple
类型的单个对象。
如果没有return
命令,则在函数体结束时,函数将返回None
。这与在函数体末尾显式写入return
(不带参数)或return None
相同。
如果使用return None
(可以将None
存储在变量中)或没有参数的return
,则None
会返回给调用者。
如果return single
,则single
对象将返回给调用者。
如果return v1, v2, v3
,则实际上返回一个元组(v1、v2、v3)
。这只是一种语法糖,您不需要编写括号。
在这种情况下,result1、result2、result3 = f()
只是另一种语法糖。 f()
返回元组,其元素自动提取到给定的变量中。实际上,您执行以下操作:
result1, result2, result3 = (v1, v2, v3)
或者
t = f() # where t is the (v1, v2, v3)
result1, result2, result3 = t
实际上,Python不允许像其他语言一样定义输出参数。你可以想象传递参数对象的地址,如果传递的对象允许修改,则可以进行修改。但是,如果传递的参数最初具有 None
值,则永远无法为传递的参数获得新结果。在Python中没有类似于函数输出参数的机制,也不能通过函数的输出参数来赋值Python变量。
从函数内部返回新创建的值(对象)的唯一自然和直接方法是使用return
命令。然而,Python函数并不限制可以返回多少个参数。(好吧,始终只有一个参数,如果它是元组,则稍后可以将其分解为元素。)
如果您想在调用者代码中测试实际返回了什么,您可以编写自己的函数,在以下值返回时执行某些特殊操作:None
、single
或某个长度的元组(可以使用len(t)
获取返回的元组t
中的元素数量)。您的函数还可以测试single
或每个元组元素的类型,并相应地工作。
[a, b] = f(x)
语法也不类似于Python的(a, b) = f(x)
。相反,Matlab中的语法[a, b] = f(x)
会告诉Matlab函数f
,其输出参数数量为2。这是Matlab语言中明确定义的语法规则,并且没有任何模棱两可的情况。这个Matlab特性是独特的,我不知道任何其他语言中有类似的特性。然而,我不认为这是由于Python之禅的任何规则所致。 - gerrit