假设我有一个Python函数,在一个元组中返回多个值:

def func():
    return 1, 2

有没有一种很好的方法来忽略一个结果,而不是仅仅分配给一个临时变量?如果我只对第一个值感兴趣,有没有比这更好的方法:

x, temp = func()

当前回答

这似乎是我最好的选择:

val1, val2, ignored1, ignored2 = some_function()

它并不晦涩或丑陋(像func()[index]方法那样),并且清楚地阐明了您的目的。

其他回答

您可以使用x = func()[0]返回第一个值,x = func()[1]返回第二个值,依此类推。

如果你想一次获得多个值,可以使用x, y = func()[2:4]。

一种常见的约定是使用“_”作为您希望忽略的元组元素的变量名。例如:

def f():
    return 1, 2, 3

_, _, x = f()

三个简单的选择。

明显的

x, _ = func()

x, junk = func()

可怕的

x = func()[0]

有很多方法可以用装饰器来做到这一点。

def val0( aFunc ):
    def pick0( *args, **kw ):
        return aFunc(*args,**kw)[0]
    return pick0

func0= val0(func)

如果这是一个一直使用但总是丢弃第二个参数的函数,我认为为没有使用lambda的第二个返回值的函数创建别名不那么混乱。

def func():
    return 1, 2

func_ = lambda: func()[0] 

func_()  # Prints 1 

当你从一个函数中有很多输出,而你不想多次调用它时,我认为选择结果的最清晰的方法是:

results = fct()
a,b = [results[i] for i in list_of_index]

作为一个最小的工作示例,也演示了函数只被调用一次:

def fct(a):
    b=a*2
    c=a+2
    d=a+b
    e=b*2
    f=a*a
    print("fct called")
    return[a,b,c,d,e,f]

results=fct(3)
> fct called

x,y = [results[i] for i in [1,4]]

和预期的值一样:

results
> [3,6,5,9,12,9]
x
> 6
y
> 12

为了方便起见,还可以使用Python列表索引:

x,y = [results[i] for i in [0,-2]]

返回:a = 3和b = 12