Python中的方便返回值

时间:2013-09-10 16:38:14

标签: python return-value

在Python中,我想编写一个具有可变数量的返回值并且易于处理的函数。像

这样的东西
def test(a):
    if a > 0:
        return True
    else:
        return False, 123, 'foo'

可以像

一样使用
out = test(-5)

但我在这里看到的一个缺点是用户必须检查return参数是否为元组,并采取相应的行动。返回值的含义不是很明确。

一个变体是使用字典作为返回值,但由于我从未在任何代码中看到过这种情况,因此感觉有点hackish。

是否有更好的方法来组织代码?

2 个答案:

答案 0 :(得分:3)

  

但我看到的一个缺点是用户必须检查是否   return参数是一个元组,并相应地采取行动。的含义   返回值不是很明确。

在这种情况下,始终返回tuple,这将与处理返回类型保持一致

>>> def test(a):
    if a > 0:
        return True,
    else:
        return False, 123, 'foo'

>>> out = test(-5)
>>> out
(False, 123, 'foo')
>>> out = test(1)
>>> out
(True,)

答案 1 :(得分:3)

始终确保您的返回值属于可以相互一致使用的类型。

在python中,函数的类型是隐式的。这意味着程序员可以创建任何类型的函数(这很棒),但这意味着您作为程序员必须注意选择类型。简而言之:你应该在docstring中描述返回类型,如果它听起来像一个坏主意,或者使用困难的功能,那就是。

这里正确的是:

def test(a):
    ''' Always returns a 3-tuple, composed of Flag,data,data. Data may be None '''
    if a > 0:
        return True, None, None
    else:
        return False, 123, 'foo'

flag,data1,data2 = test(a)

def test(a):
    ''' Always returns a tuple, composed of a Flag, followed by 0 or more data items '''
    if a > 0:
        return True,
    else:
        return False, 123, 'foo'

return = test(a)
flag,rest = return[0],return[1:]
for x in rest: print x