for*_*818 4 python function return-value
我有一个函数,大多数时候应该返回一个值,但有时我需要从函数返回的第二个值.在这里我找到了如何返回多个值,但是大多数时候我只需要其中一个,我想写这样的东西:
def test_fun():
return 1,2
def test_call():
x = test_fun()
print x
Run Code Online (Sandbox Code Playgroud)
但调用此结果
>>> test_call()
(1,2)
Run Code Online (Sandbox Code Playgroud)
当试图返回两个以上时,如
def test_fun2():
return 1,2,3
def test_call2():
x,y = test_fun2()
print x,y
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
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
Run Code Online (Sandbox Code Playgroud)
我正在考虑像matlab这样的东西x = test_fun()会导致x == 1(同时[x y] = test_fun()也会按预期工作).在python中有类似的东西吗?
Mad*_*ist 10
您可以使用星形解包将所有其他返回值收集到列表中:
x, *y = fun()
Run Code Online (Sandbox Code Playgroud)
x将包含第一个返回值.y将是剩余值的列表.y如果只有一个返回值,则为空.此特定示例仅在函数返回元组时才有效,即使只有一个值.
当fun总是返回1或2个值时,您可以这样做
if y:
print(y[0])
else:
print('only one value')
Run Code Online (Sandbox Code Playgroud)
另一方面,如果要完全忽略返回值的数量,请执行此操作
*x = fun()
Run Code Online (Sandbox Code Playgroud)
现在所有参数都将被收集到列表中.然后你可以用它们打印
print(x)
Run Code Online (Sandbox Code Playgroud)
要么
print(*x)
Run Code Online (Sandbox Code Playgroud)
后者将每个元素作为单独的参数传递,就像您一样
x, y, z = fun()
print(x, y, z)
Run Code Online (Sandbox Code Playgroud)
使用*x = fun()而不是just 的原因x = fun()是当函数返回不是元组的东西时立即得到错误.将其视为提醒您fun正确写作的断言.
由于这种形式的星形解包仅适用于Python 3,因此Python 2中唯一的选择就是这样做
x = fun()
Run Code Online (Sandbox Code Playgroud)
并手动检查结果.
| 归档时间: |
|
| 查看次数: |
1861 次 |
| 最近记录: |