根据调用者返回不同数量的变量

Sem*_*aki 0 python return

在 python 中,函数是否可以根据调用者返回不同数量的变量?

我是一名 Matlab 程序员,在这种语言中它被大量使用,但我想知道 python 是否也有这个选项,它是否是一个很好的编程实践。

MATLAB 示例:

minval      = min([5,2,7,1,6])   % will only return the min value
minval, idx = min([5,2,7,1,6])   % will return the min value and the index
Run Code Online (Sandbox Code Playgroud)

这里的 min 函数只是一个例子(我的函数与计算最小值无关)。

我想创建一个函数,在 90% 的情况下只使用第一个返回值(例如 in min,有时您不关心索引而只想要值本身)。

当然,我可以强制每次使用 2 个返回值来调用它,但我认为如果您可以根据需要仅使用 1 个返回值或 2 个返回值调用它,它会更清晰、更好。

我看到了一些关于传递带有默认值的标志来告诉函数期望输出多少的有趣建议,但我一直在寻找完全透明的东西。

Rem*_*ich 5

没有标准的 Python 方法可以做到这一点;Python 函数通常不知道它被调用的上下文。

我不会声称这是不可能的,因为有很多方法可以返回堆栈跟踪,检查代码对象等等,谁知道呢,可能会以某种方式 - 但不是以您实际想要的方式用。

在 Python 中,你要么传递一个带有默认值的选项,这样你就不必在正常情况下传递它:

def min(iterable, return_index=False):
    ...

minval = min([5,2,7,1,6])
minval, i = min([5,2,7,1,6], return_index=True)
Run Code Online (Sandbox Code Playgroud)

或者你总是返回两者,而忽略其中之一:

minval, _ = minwithindex([5,2,7,1,6])
Run Code Online (Sandbox Code Playgroud)