如何从* args返回多个值?

时间:2011-12-05 06:30:41

标签: python function python-3.x python-2.x

我有一个hello函数,它需要n个参数(参见下面的代码)。

def hello(*args):
  # return values

我想从*args返回多个值。怎么做?例如:

d, e, f = hello(a, b, c)

SOLUTION:

def hello(*args):
  values = {} # values
  rst = [] # result
  for arg in args:
    rst.append(values[arg])
  return rst

a, b, c = hello('d', 'e', f)
a, b = hello('d', 'f')

只需返回列表。 :):D

4 个答案:

答案 0 :(得分:9)

因此,您希望返回一个与args长度相同的新元组(即len(args)),其值由args [0],args [1]等计算。 请注意,您无法直接修改'args',例如你不能分配args [0] = xxx,这是非法的并且会引发TypeError:'tuple'对象不支持项目赋值。 你需要做的是返回一个 new 元组,其长度与len(args)相同。 例如,如果您希望函数为每个参数添加一个,则可以这样执行:

def plus_one(*args):
    return tuple(arg + 1 for arg in args)

或者以更详细的方式:

def plus_one(*args):
    result = []
    for arg in args: result.append(arg + 1)
    return tuple(result)

然后,做:

d, e, f = plus_one(1, 2, 3)

将返回一个3元素的元组,其值为2,3和4。

该函数适用于任意数量的参数。

答案 1 :(得分:1)

只需返回一个元组:

def hello(*args):
    return 1, 2, 3

...或...

    return (1, 2, 3)

答案 2 :(得分:1)

args是一个列表。如果你返回一个序列(list,tuple),Python将尝试迭代并分配给你的d,e,f变量。所以下面的代码是可以的。

def hello(*args):
   return args

d, e,  f = hello(1,2,3)

只要你有* args列表中正确数量的值。它将被分配给您的变量。如果没有,il将引发ValueError异常。

d, e, f = hello(1, 2) #raise ValueError

我希望ith帮助

答案 3 :(得分:0)

回来吧。例如,如果要返回未修改的参数,请执行以下操作:

def hello(*args):
    return args

如果您想要返回其他内容,请返回:

def hello(*args):
    # ...
    # Compute d, e and f
    # ...
    return d, e, f