如何从*args返回多个值

  • 本文关键字:返回 args python
  • 更新时间 :
  • 英文 :


我有一个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

所以,你想返回一个与args长度相同的新元组(即len(args)),其值是从args[0], args[1]等计算出来的。请注意,你不能直接修改'args',例如,你不能赋值args[0] = xxx,这是非法的,会引发TypeError: 'tuple'对象不支持项赋值。然后你需要做的是返回一个新的元组,其长度与len(args)相同。例如,如果你想让你的函数给每个参数加1,你可以这样做:

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。

函数可以使用任意数量的参数

返回一个元组:

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

…或…

    return (1, 2, 3)

args是一个列表。如果你返回一个序列(list, tuple), 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

希望能有所帮助

直接返回。例如,如果您希望返回未经修改的参数,可以这样做:

def hello(*args):
    return args

如果你想返回别的东西,就返回它:

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

最新更新