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

时间:2016-12-06 09:59:23

标签: 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

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

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

当然我每次都可以用2个返回值强制调用,但我认为如果你只需要一次返回或者根据你的需要调用它就会更干净更好。

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

2 个答案:

答案 0 :(得分:4)

没有标准的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)

或者你总是返回两者,只是忽略其中一个:

minval, _ = minwithindex([5,2,7,1,6])

答案 1 :(得分:-2)

当然可以做到!只需准备一个empy列表并使用它来接收不同数量的值。看看我的例子:

def foo(number):
    if number < 0:
        return "more","values","returned"
    else:
        return "single value"

num = 5
myList = foo(num)