python - 可选的多个返回值

标签 python function return-value

我有一个函数,大多数时候应该返回一个值,但有时我需要从该函数返回第二个值。 Here我找到了如何返回多个值,但由于大多数时候我只需要其中一个值,所以我想这样写:

def test_fun():
    return 1,2

def test_call():
    x = test_fun()
    print x

但是调用这个结果

>>> test_call()
(1,2)

当尝试返回两个以上时,如

def test_fun2():
    return 1,2,3

def test_call2():
    x,y = test_fun2()
    print x,y

我得到一个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "my_module.py", line 47, in test_call2
    x,y = test_fun2()
ValueError: too many values to unpack

我正在考虑类似 matlab 的东西,其中 x = test_fun() 会导致 x == 1(而 [x y] = test_fun( ) 也将按预期工作)。在 python 中可以实现类似的功能吗?

最佳答案

您可以使用星形拆包将所有额外的返回值收集到一个列表中:

x, *y = fun()

x 将包含第一个返回值。 y 将是剩余值的列表。如果只有一个返回值,y 将为空。这个特殊的例子只有在函数返回一个元组时才有效,即使只有一个值也是如此。

fun 总是返回 1 或 2 个值时,您可以这样做

if y:
    print(y[0])
else:
    print('only one value')

另一方面,如果您想完全忽略返回值的数量,请执行

*x = fun()

现在所有参数都将收集到列表中。然后你可以打印它

print(x)

print(*x)

后者会将每个元素作为单独的参数传递,就像您所做的一样

x, y, z = fun()
print(x, y, z)

使用 *x = fun() 而不是仅仅 x = fun() 的原因是当函数返回不是一个元组。将其视为提醒您正确编写 fun 的断言。

由于这种形式的星型解包仅适用于 Python 3,因此您在 Python 2 中唯一的选择就是这样做

x = fun()

并手动检查结果。

关于python - 可选的多个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49168762/

相关文章:

python - 如何检查 pandas 数据帧的列中的所有值是否相等?

python - 这是将实时数据记录到数据库中的合乎逻辑的方法吗?

javascript - toLowerCase() 如何在 Javascript 中工作?

c - 下面函数中的表达式是如何计算的?

ios - 从 block 返回- objective-c

java - 我如何在这里创建此方法的实例?

python - 将 ctypes 与 typedef 一起使用

python - 直接从python调用intel的mkl时使用多个线程

javascript - jQuery 插件回调函数参数

c - 从函数返回 char * 的内容