如何从*args返回多个值?

10 投票
4 回答
15733 浏览
提问于 2025-04-17 07:42

我有一个叫做 hello 的函数,它可以接收 n 个参数(见下面的代码)。

def hello(*args):
  # return values

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

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

解决方案:

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 个回答

1

args 是一个列表。如果你返回一个序列(比如列表或元组),Python 会尝试把这些值一个一个地赋给你的 d、e、f 变量。所以下面的代码是可以的。

def hello(*args):
   return args

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

只要你在 *args 列表中有正确数量的值,它们就会被赋给你的变量。如果数量不对,就会出现一个叫 ValueError 的错误。

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

希望这能帮到你。

1

只需要返回一个元组:

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

...或者...

    return (1, 2, 3)
14

所以,你想要返回一个新的元组,它的长度和传入的参数(也就是 args 的长度)是一样的,并且这个新元组的值是根据 args[0]、args[1] 等计算出来的。需要注意的是,你不能直接修改 'args',比如说不能写 args[0] = xxx,这样做是非法的,会报错 TypeError: 'tuple' object does not support item assignment。

你需要做的是返回一个 新的 元组,它的长度和 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。

这个函数可以处理任意数量的参数。

撰写回答