假设我有一个Python函数,在一个元组中返回多个值:
def func():
return 1, 2
有没有一种很好的方法来忽略一个结果,而不是仅仅分配给一个临时变量?如果我只对第一个值感兴趣,有没有比这更好的方法:
x, temp = func()
假设我有一个Python函数,在一个元组中返回多个值:
def func():
return 1, 2
有没有一种很好的方法来忽略一个结果,而不是仅仅分配给一个临时变量?如果我只对第一个值感兴趣,有没有比这更好的方法:
x, temp = func()
当前回答
记住,当返回多个元素时,实际上返回的是一个元组。所以你可以这样做:
def func():
return 1, 2
print func()[0] # prints 1
print func()[1] # prints 2
其他回答
您可以使用x = func()[0]返回第一个值,x = func()[1]返回第二个值,依此类推。
如果你想一次获得多个值,可以使用x, y = func()[2:4]。
常见的做法是使用虚拟变量_(单个下划线),正如前面许多人指出的那样。
然而,为了避免与该变量名的其他用法发生冲突(参见此响应),可能更好的做法是使用__(双下划线)作为丢弃变量,正如ncoghlan所指出的那样。例如:
x, __ = func()
这不是对这个问题的直接回答。相反,它回答了这个问题:“我如何从许多可能的选项中选择一个特定的函数输出?”
如果您能够编写函数(即,它不在您不能修改的库中),那么添加一个输入参数,指示您想从函数中得到什么。让它成为一个带有默认值的命名参数,这样在“常见情况”下你甚至不需要指定它。
def fancy_function( arg1, arg2, return_type=1 ):
ret_val = None
if( 1 == return_type ):
ret_val = arg1 + arg2
elif( 2 == return_type ):
ret_val = [ arg1, arg2, arg1 * arg2 ]
else:
ret_val = ( arg1, arg2, arg1 + arg2, arg1 * arg2 )
return( ret_val )
该方法给出了关于所需输出的“高级警告”函数。因此,它可以跳过不需要的处理,只做获得所需输出所需的工作。另外,因为Python是动态类型,所以返回类型可以改变。注意这个例子是如何返回标量、列表或元组的…你喜欢什么都行!
一种常见的约定是使用“_”作为您希望忽略的元组元素的变量名。例如:
def f():
return 1, 2, 3
_, _, x = f()
如果你在使用python3,你可以在变量前使用星号(在赋值的左边),让它在解包时成为一个列表。
# Example 1: a is 1 and b is [2, 3]
a, *b = [1, 2, 3]
# Example 2: a is 1, b is [2, 3], and c is 4
a, *b, c = [1, 2, 3, 4]
# Example 3: b is [1, 2] and c is 3
*b, c = [1, 2, 3]
# Example 4: a is 1 and b is []
a, *b = [1]